Справочник по Python
Назначение
Справочник-шпаргалка по Python: типы, синтаксис, стандартная библиотека, типовые паттерны. Не заменяет пошаговое обучение. Учебный курс: [раздел](/encyclopedia/5-languages/5.02. Python/intro).
Краткое пояснение
Основные свойства, особенности и детали языка.
Быстрый старт
| Задача | Команда |
|---|---|
| Версия | python --version / python3 --version |
| venv | python -m venv .venv → активация: .venv/Scripts/activate (Win) или source .venv/bin/activate |
| Зависимости | pip install -r requirements.txt |
| Запуск | python main.py |
Справочные таблицы
Часть 1. Ядро языка Python
Версия справочника соответствует CPython 3.12 (актуальная LTS-версия на 2025 год).
1.1 Встроенные типы
Python определяет следующие встроенные типы. Все они реализованы на уровне интерпретатора и доступны без импорта.
NoneType
Единственный экземпляр — None.
- Атрибуты: отсутствуют
- Методы: отсутствуют
- Свойства:
__class__—<class 'NoneType'>__bool__()возвращаетFalse__repr__()возвращает'None'
bool
Имеет два экземпляра: True, False. Наследует от int.
- Атрибуты: отсутствуют
- Методы: наследует все методы
int, но не предоставляет новых - Свойства:
__class__—<class 'bool'>__new__(cls, x=False)— создаётTrue, еслиxистинно, иначеFalse__abs__(),__add__(),__and__(),__eq__(),__float__(),__int__(),__invert__(),__or__(),__repr__(),__str__()— определены явно- Унарные и бинарные операции с
boolвозвращаютint, если результат не может быть представлен какbool(например,True + True→2)
int
Произвольной точности целое число.
- Атрибуты:
real,imag,numerator,denominator— свойства, возвращающие сам объект (для целых чисел)
- Методы:
bit_length()— количество бит, необходимых для представления абсолютного значения, без учёта знакаto_bytes(length, byteorder, *, signed=False)— сериализация вbytesfrom_bytes(bytes, byteorder, *, signed=False)— конструктор класса изbytesas_integer_ratio()— возвращает кортеж(self, 1)__ceil__(),__floor__(),__round__(),__trunc__()— совместимость сnumbers.Integral
- Свойства:
__class__—<class 'int'>__new__(cls, x=0, base=10)— поддерживает строку с указанием основания- Допустимые основания: от 2 до 36 включительно
- Бинарные операции:
+ - * // % divmod ** << >> & | ^ - Бинарные операции с плавающей запятой возвращают
float - Операции сравнения:
< <= == != >= >
float
Число с плавающей запятой двойной точности (IEEE 754 binary64).
- Атрибуты:
real,imag,is_integer()— возвращаетTrue, если значение целое
- Методы:
as_integer_ratio()— возвращает(n, d),n/d == self,d > 0hex()— шестнадцатеричная строка вида0x1.8p+1fromhex(s)— конструктор из шестнадцатеричной строки
- Свойства:
__class__—<class 'float'>__new__(cls, x=0.0)— преобразует строки, целые, другиеfloat- Специальные значения:
inf,-inf,nan(получаются черезfloat('inf'),float('nan')) nan == nanвозвращаетFalse;math.isnan()используется для проверки- Все операции с
nan(кроме!=) возвращаютnan - Операции с
inf:inf + inf == inf,inf - inf == nan,inf / inf == nan,0 * inf == nan
complex
Комплексное число: real + imag * 1j
- Атрибуты:
real,imag— вещественная и мнимая части (float)
- Методы:
conjugate()— возвращает комплексно-сопряжённое__abs__()— модуль числа (sqrt(real² + imag²))
- Свойства:
__class__—<class 'complex'>__new__(cls, real=0.0, imag=0.0)— принимает числа или строки вида'3+4j'- Строковый литерал:
3+4j,1j,5.(вещественное), но неj - Нельзя сравнивать на
<,<=,>,>= - Поддерживает:
+ - * / // % ** - Целочисленное деление
//и деление по модулю%не определены (выбрасываютTypeError)
str
Неизменяемая последовательность Unicode-символов (UTF-8 внутри).
- Атрибуты: отсутствуют (все методы — функции)
- Методы (выборочно, наиболее употребительные; всего — 48):
capitalize()casefold()center(width[, fillchar])count(sub[, start[, end]])encode(encoding='utf-8', errors='strict')endswith(suffix[, start[, end]])expandtabs(tabsize=8)find(sub[, start[, end]])format(*args, **kwargs)format_map(mapping)index(sub[, start[, end]])isalnum(),isalpha(),isascii(),isdecimal(),isdigit(),isidentifier(),islower(),isnumeric(),isprintable(),isspace(),istitle(),isupper()join(iterable)ljust(width[, fillchar])lower()lstrip([chars])maketrans(x[, y[, z]])— статический метод, возвращает таблицу дляtranslate()partition(sep)removeprefix(prefix),removesuffix(suffix)replace(old, new[, count])rfind(sub[, start[, end]])rindex(sub[, start[, end]])rjust(width[, fillchar])rpartition(sep)rsplit(sep=None, maxsplit=-1)rstrip([chars])split(sep=None, maxsplit=-1)splitlines([keepends])startswith(prefix[, start[, end]])strip([chars])swapcase()title()translate(table)upper()zfill(width)
- Свойства:
__class__—<class 'str'>__new__(cls, object='')— преобразует объект в строку__getitem__(key)— возвращаетstrдлины 1__iter__()— итератор по символам__len__()— длина в символах (не в байтах)__contains__(sub)— проверка подстроки__add__,__mul__,__rmul__— конкатенация и повторение__mod__— форматирование по%- Литералы:
',",''',""",r'',f'',rf'',fr'' - Escape-последовательности:
\n \r \t \\ \' \" \xhh \uhhhh \Uhhhhhhhh \N{name} - Строки — хэшируемы
bytes
Неизменяемая последовательность байтов (целых от 0 до 255).
- Атрибуты: отсутствуют
- Методы (все аналогичны
str, но для байтов):capitalize(),center(),count(),decode(encoding='utf-8', errors='strict'),endswith(),expandtabs(),find(),hex(),index(),isalnum(),isalpha(),isascii(),isdigit(),islower(),isspace(),istitle(),isupper(),join(),ljust(),lower(),lstrip(),maketrans(from, to)— статический, возвращаетbytesтаблицуpartition(),removeprefix(),removesuffix(),replace(),rfind(),rindex(),rjust(),rpartition(),rsplit(),rstrip(),split(),splitlines(),startswith(),strip(),swapcase(),title(),translate(table),upper(),zfill()fromhex(s)— статический метод
- Свойства:
__class__—<class 'bytes'>__new__(cls, source=b'', encoding=None, errors='strict')— принимаетint,str(сencoding),Iterable[int],bytes-like__getitem__,__iter__,__len__,__contains__,__add__,__mul__,__rmul__— как уstr- Литералы:
b'',br'',rb'' - Escape-последовательности: только ASCII (
\n \r \t \\ \' \" \xhh) - Не поддерживает
format(),format_map() - Хэшируем
bytearray
Изменяемая последовательность байтов.
- Атрибуты: отсутствуют
- Методы:
- Все методы
bytes, плюс изменяющие:append(x),clear(),copy(),extend(iterable),insert(i, x),pop([i]),remove(value),reverse()__setitem__,__delitem__,__iadd__,__imul__
- Все методы
- Свойства:
__class__—<class 'bytearray'>__new__(cls, source=b'', encoding=None, errors='strict')— какbytes- Не хэшируем
memoryview
Представление буферного протокола без копирования.
- Атрибуты:
format— строка формата (например,'B','d','3f')itemsize— размер одного элемента в байтахndim— количество измеренийreadonly—boolshape— кортеж размеров,Noneдля одномерных неизвестной длиныstrides— кортеж шагов,Noneпри отсутствииsuboffsets— кортеж смещений для вложенных структурc_contiguous,f_contiguous,contiguous— флаги расположения в памяти
- Методы:
tobytes()tolist()toreadonly()cast(format[, shape])release()
- Свойства:
__class__—<class 'memoryview'>__new__(cls, obj)—objдолжен реализовывать буферный протокол__getitem__,__setitem__(если неreadonly)__len__,__eq__,__hash__(хэш равенNone, если неreadonly)- Поддерживает нарезку, возвращает
memoryview
list
Изменяемая упорядоченная последовательность произвольных объектов.
- Атрибуты: отсутствуют
- Методы:
append(x),clear(),copy(),count(x),extend(iterable),index(x[, start[, end]]),insert(i, x),pop([i]),remove(x),reverse(),sort(*, key=None, reverse=False)
- Свойства:
__class__—<class 'list'>__new__(cls, iterable=())__getitem__,__setitem__,__delitem__,__len__,__iter__,__contains____add__,__iadd__,__mul__,__imul__,__rmul__- Не хэшируем
- Реализует
collections.abc.MutableSequence
tuple
Неизменяемая упорядоченная последовательность произвольных объектов.
- Атрибуты: отсутствуют
- Методы:
count(x),index(x[, start[, end]])
- Свойства:
__class__—<class 'tuple'>__new__(cls, iterable=())__getitem__,__len__,__iter__,__contains__,__add__,__mul__,__rmul__- Хэшируем (если все элементы хэшируемы)
range
Неизменяемая арифметическая прогрессия целых чисел.
- Атрибуты:
start,stop,step—int
- Методы:
count(value),index(value)
- Свойства:
__class__—<class 'range'>__new__(cls, stop)или__new__(cls, start, stop[, step])__getitem__,__len__,__iter__,__contains__,__reversed__- Хэшируем
- Постоянный объём памяти (не хранит все элементы)
- Поддерживает срезы:
range(...)[::k]→ новыйrange
dict
Изменяемое отображение «ключ → значение». Порядок вставки сохраняется (с Python 3.7 как гарантия).
- Атрибуты: отсутствуют
- Методы:
clear(),copy(),fromkeys(iterable[, value])— статическийget(key[, default]),items(),keys(),pop(key[, default]),popitem(),setdefault(key[, default]),update([other]),values()__class_getitem__()— поддержкаdict[str, int]для аннотаций
- Свойства:
__class__—<class 'dict'>__new__(cls, other=None, **kwargs)— принимает отображения, итераторы пар, ключевые аргументы__getitem__,__setitem__,__delitem__,__len__,__iter__,__contains____or__,__ror__,__ior__(с Python 3.9) — объединение- Не хэшируем
- Порог перестроения хэш-таблицы: ~2/3 заполнения
- Хэш-функция ключа:
hash(key), должен быть хэшируемым - Операции
in,[],get,setdefaultимеют амортизированнуюO(1)сложность
set
Изменяемое неупорядоченное множество хэшируемых объектов без дубликатов.
- Атрибуты: отсутствуют
- Методы:
add(elem),clear(),copy(),difference(*others),difference_update(*others),discard(elem),intersection(*others),intersection_update(*others),isdisjoint(other),issubset(other),issuperset(other),pop(),remove(elem),symmetric_difference(other),symmetric_difference_update(other),union(*others),update(*others)
- Свойства:
__class__—<class 'set'>__new__(cls, iterable=())__len__,__iter__,__contains__,__ior__,__iand__,__ixor__,__isub__- Не хэшируем
- Литералы:
{1, 2, 3},{}— не пустойset, а пустойdict; дляset()требуется вызов конструктора - Операции
in,add,discard,remove— амортизированнаяO(1)
frozenset
Неизменяемое множество.
- Атрибуты: отсутствуют
- Методы: все как у
set, кроме изменяющих (add,discard,pop, и т.д.) - Свойства:
__class__—<class 'frozenset'>__new__(cls, iterable=())__len__,__iter__,__contains__,__or__,__and__,__xor__,__sub__- Хэшируем
- Литералов нет — только через конструктор
1.2 Встроенные вызываемые объекты и служебные типы
type
Метакласс по умолчанию.
- Атрибуты:
__name__— имя класса (str)__qualname__— квалифицированное имя (str)__module__— имя модуля, в котором определён класс__bases__— кортеж базовых классов__mro__— кортеж, порядок разрешения методов__subclasses__()— список прямых подклассов__dict__—mappingproxyс атрибутами класса__annotations__— словарь аннотаций типов полей класса (если есть)
- Методы:
__call__()— создаёт экземпляр класса (вызывает__new__, затем__init__)__instancecheck__(instance)— используется вisinstance()__subclasscheck__(subclass)— используется вissubclass()mro()— возвращает__mro__
- Свойства:
__new__(cls, name, bases, dict, **kwargs)— конструктор класса- Любой класс — экземпляр
typeили его подкласса - Любой экземпляр класса — объект, чей
type(obj)— класс - Поддерживает наследование, множественное наследование, динамическое создание (
type('A', (), {}))
function
Объект, создаваемый при выполнении def.
- Атрибуты:
__name__,__qualname__,__module__,__doc____annotations__— словарь аннотаций параметров и возвращаемого значения__defaults__— кортеж значений по умолчанию (позиционные, справа)__kwdefaults__— словарь значений по умолчанию для ключевых параметров__code__— объектcode, байт-код функции__globals__— словарь глобальных переменных модуля__closure__— кортеж ячеек (cell), замыкание;None, если нет__dict__— пользовательский словарь (изменяемый, для метаданных)
- Свойства:
__call__(*args, **kwargs)— вызов функции- Поддерживает
pickle, если не замыкает непикл-объекты - Функции — хэшируемы
builtin_function_or_method
Объекты, реализованные на уровне C (например, len, print, int.bit_length).
- Атрибуты:
__name__,__doc__,__module____self__— для методов: экземпляр или класс, к которому привязан; у встроенных функций —None
- Свойства:
__call__— вызов реализован в C- Не имеет
__code__,__defaults__,__closure__,__dict__ - Хэшируем
method
Метод экземпляра: вызов obj.method создаёт method, где __func__ — функция из класса, __self__ — obj.
- Атрибуты:
__func__— исходная функция (function)__self__— экземпляр__doc__,__name__,__module__,__annotations__— проксируются из__func__
- Свойства:
__call__()— вызывает__func__(__self__, *args, **kwargs)- Хэшируем, если
__self__и__func__хэшируемы
classmethod
Дескриптор, возвращающий method, где __self__ — класс.
- Атрибуты:
__func__— функция, обёрнутая в@classmethod
- Свойства:
__get__(instance, owner)— возвращаетmethod(__func__, owner)- Вызываем напрямую:
cls.method()→__func__(cls, ...)
staticmethod
Дескриптор, возвращающий исходную функцию без привязки.
- Атрибуты:
__func__— функция
- Свойства:
__get__(instance, owner)— возвращает__func__- Вызов:
cls.method()илиobj.method()→__func__(...)
property
Дескриптор для управления доступом к атрибуту.
- Атрибуты:
fget,fset,fdel,doc— функции/строка
- Методы:
getter(func),setter(func),deleter(func)— возвращают новыйproperty
- Свойства:
__get__(obj, owner)— вызываетfget(obj)__set__(obj, value)— вызываетfset(obj, value)__delete__(obj)— вызываетfdel(obj)- Поддерживает декораторный синтаксис:
@propertydef x(self): ...@x.setterdef x(self, v): ...
module
Объект модуля (например, import math → math).
- Атрибуты:
__name__— полное имя ('os.path','__main__')__doc__— строка документации модуля__package__— имя пакета (или''для верхнего уровня)__loader__,__spec__— объекты загрузчика и спецификации__file__— путь к.py(может отсутствовать)__cached__— путь к.pyc__dict__— словарь атрибутов модуля
- Свойства:
- Все глобальные имена в модуле — атрибуты объекта
module - Поддерживает
pickle(по имени)
- Все глобальные имена в модуле — атрибуты объекта
ellipsis
Единственный экземпляр — ... (синтаксический литерал).
- Атрибуты: отсутствуют
- Использование:
- В типах:
Tuple[int, ...] - В срезах:
a[...]для многомерных массивов (NumPy) - Заглушка в заглушках (например, в
abc.ABC)
- В типах:
slice
Объект среза ([start:stop:step]).
- Атрибуты:
start,stop,step— значения (None, если не указаны)
- Методы:
indices(length)— возвращает(start, stop, step), приведённые кlength
- Свойства:
__new__(cls, stop)или__new__(cls, start, stop[, step])- Хэшируем
slice(None)эквивалентен[:]
mappingproxy
Только для чтения обёртка над dict (type.__dict__).
- Атрибуты: отсутствуют
- Методы:
- Все методы
dict, кроме изменяющих (clear,update,__setitem__, и т.д.)
- Все методы
- Свойства:
__new__(cls, mapping)- Динамически отражает изменения в оригинальном
dict - Хэшируем (только если оригинальный
dictнеизменяем, но в Pythondictне хэшируем, поэтомуmappingproxyне хэшируем)
weakref.ref
Слабая ссылка на объект.
- Атрибуты: отсутствуют
- Методы:
__call__()— возвращает объект, если жив, иначеNone__hash__()— хэш объекта, на который ссылается
- Свойства:
__new__(cls, obj[, callback])callbackвызывается при сборке мусора объектаobj- Не препятствует сборке мусора
- Нельзя создать для
int,str,tuple,None,bool,type,function, если они не имеют__weakref__в слотах
weakref.proxy
Прозрачная слабая ссылка (доступ как к оригиналу).
- Атрибуты, методы: как у целевого объекта
- Свойства:
__new__(cls, obj[, callback])- При обращении к атрибуту, если объект мёртв —
ReferenceError - Поддерживает арифметику, вызов, индексацию и т.д.
generator
Результат вызова функции с yield.
- Атрибуты:
__name__,__qualname__— из функцииgi_frame— объектframe(может бытьNoneпосле завершения)gi_code—codeфункцииgi_running—bool, выполняется ли сейчасgi_yieldfrom—Noneили подгенератор, еслиyield from
- Методы:
__next__()— продолжает выполнение доyieldилиStopIterationsend(value)— передаёт значение вyieldthrow(type[, value[, traceback]])— возбуждает исключение в генератореclose()— завершает генератор, вызываяGeneratorExit
- Свойства:
- Реализует
collections.abc.Iterator - Не хэшируем
- После исчерпания —
gi_frame = None, повторный__next__→StopIteration
- Реализует
coroutine
Объект асинхронной функции (async def).
- Атрибуты:
__name__,__qualname__,__doc__cr_await— ожидаемый объект (None, если не вawait)cr_frame,cr_code— текущий фрейм и кодcr_running—bool
- Методы:
send(value)throw(type[, value[, traceback]])close()
- Свойства:
__await__()возвращает сам объектawait coro→ запускает выполнение доawaitилиreturn- После завершения —
StopIteration(сvalue) илиStopAsyncIteration;cr_frame = None
async_generator
Результат async def с yield.
- Атрибуты:
__name__,__qualname__ag_frame,ag_code,ag_running,ag_await
- Методы:
asend(value)athrow(type[, value[, traceback]])aclose()__aiter__()→ сам объект__anext__()→awaitable, возвращаетvalueилиStopAsyncIteration
- Свойства:
- Используется в
async for - Асинхронный аналог
generator
- Используется в
code
Байт-код функции (доступен через func.__code__).
- Атрибуты:
co_argcount,co_posonlyargcount,co_kwonlyargcountco_nlocals,co_stacksize,co_flagsco_code—bytes, байт-кодco_consts— кортеж констант (None,int,str,code, ...)co_names— имена глобальных переменныхco_varnames— имена локальных переменныхco_filename,co_name,co_firstlinenoco_lnotab— таблица сопоставления байт-код ↔ строки (устарела в 3.10+, заменена наco_lines())co_freevars,co_cellvars— имена замыканий
- Методы:
co_lines()— генератор(start, end, lineno)для отладкиco_positions()— генератор(lineno, end_lineno, col_offset, end_col_offset)
- Свойства:
- Хэшируем
- Конструируется через
types.CodeType(...)
frame
Контекст выполнения (стек вызовов).
- Атрибуты:
f_back— предыдущий фрейм (Noneна вершине)f_code—codef_locals,f_globals,f_builtins— словариf_lasti— индекс текущей инструкции вco_codef_lineno— текущая строкаf_trace— функция трассировки (sys.settrace)f_trace_lines,f_trace_opcodes— флаги трассировки
- Свойства:
- Доступен через
inspect.currentframe(),tb.tb_frame,gen.gi_frame - Не рекомендуется к сохранению — содержит циклические ссылки
f_localsможет требоватьf_locals.update()при изменении извне
- Доступен через
traceback
Цепочка трассировок исключения.
- Атрибуты:
tb_next— следующийtraceback(None, если конец)tb_frame—frametb_lasti,tb_lineno— как вframe
- Свойства:
- Хэшируем
- Сериализуется через
traceback.print_tb(),traceback.format_tb() - Используется в
sys.exc_info()[2]
getset_descriptor
Дескриптор, вызываемый при доступе к атрибуту (__get__, __set__ реализованы в C).
- Атрибуты:
__name__,__doc__
- Свойства:
- Используется в
datetime.datetime.year,array.array.typecodeи др. __get__(obj, type)→ значение__set__(obj, value)→ присваивание (если есть)__delete__— опционален
- Используется в
method_descriptor, wrapper_descriptor
Объекты методов, реализованные в C (например, dict.get, list.append).
- Атрибуты:
__name__,__doc__,__qualname__,__objclass__
- Свойства:
- При доступе через экземпляр →
builtin_method_or_method_descriptorс__self__ = obj - При доступе через класс →
method_descriptor __get__(obj, type)возвращает привязанный метод- Документация содержит сигнатуру в
__text_signature__(например,($self, key, default=None, /))
- При доступе через экземпляр →
1.3 Встроенные функции
(Выборочно — наиболее употребительные. Полный список: 70+)
abs(x)
Возвращает абсолютное значение:
int,float,complex→|x|- Объект с
__abs__()→ результат вызова - Сигнатура:
abs(x: SupportsAbs[T]) -> T
aiter(async_iterable)
Возвращает асинхронный итератор через async_iterable.__aiter__()
all(iterable)
Возвращает True, если все элементы истинны или итерируемое пусто.
any(iterable)
Возвращает True, если хотя бы один элемент истинен.
ascii(object)
Возвращает repr(object), экранируя непечатаемые ASCII символы как \x, \u, \U.
bin(x)
Возвращает двоичную строку '0b...' для целого x.
bool(x=False)
Преобразует x в bool:
False:None,False,0,0.0,0j,'',(),[],{},set(),range(0)True: всё остальное- Объект с
__bool__()→ результат вызова; иначе__len__()→len != 0
breakpoint(*args, **kws)
Вызывает sys.breakpointhook(*args, **kws) (по умолчанию — pdb.set_trace())
bytearray(source=b'', encoding=None, errors='strict')
Создаёт изменяемый байтовый массив.
source:int,str(сencoding),bytes,Iterable[int],buffer
bytes(source=b'', encoding=None, errors='strict')
Создаёт неизменяемый байтовый объект.
callable(object)
Возвращает True, если объект вызываем (__call__ существует и не None).
chr(i)
Возвращает строку длины 1 с Unicode-символом с кодом i (0 ≤ i ≤ 0x10FFFF)
classmethod(func)
Преобразует функцию в метод класса.
compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)
Компилирует source (строка/AST) в code.
mode:'exec','eval','single'optimize:-1(текущий),0,1,2
complex(real=0, imag=0)
Создаёт комплексное число.
real:int,float,complex,str(например,'3+4j')imag:int,float
delattr(object, name)
Удаляет атрибут name из object (del object.name).
dict(iterable=(), **kwargs)
Создаёт словарь.
iterable: итератор пар(key, value)**kwargs— именованные аргументы
dir([object])
Возвращает список имён в локальном пространстве имён (если object не указан) или атрибутов объекта.
- Вызывает
object.__dir__()при наличии - Иначе:
sorted(object.__dict__.keys() + базовые атрибуты)
divmod(a, b)
Возвращает (a // b, a % b) для чисел; вызывает a.__divmod__(b).
enumerate(iterable, start=0)
Возвращает итератор кортежей (index, value).
eval(expression, globals=None, locals=None)
Выполняет строку как выражение.
globals,locals— словари;globalsдолжен содержать__builtins__, если задан- Рекомендуется избегать при ненадёжном
expression
exec(object, globals=None, locals=None)
Выполняет строку как оператор.
object:str,bytes,code- Возвращает
None
filter(function, iterable)
Возвращает итератор, для которого function(item) истинно.
function = None→ фильтрация на истинность
float(x=0.0)
Преобразует x в float.
x:int,float,str,bytes, объект с__float__()float('inf'),float('-inf'),float('nan')
format(value, format_spec='')
Вызывает value.__format__(format_spec).
frozenset(iterable=())
Создаёт неизменяемое множество.
getattr(object, name[, default])
Возвращает object.name.
- Если атрибут отсутствует и указан
default— возвращаетdefault - Иначе —
AttributeError
globals()
Возвращает словарь глобальных переменных текущего модуля.
hasattr(object, name)
Возвращает True, если object имеет атрибут name.
hash(object)
Возвращает хэш объекта.
- Объект должен быть хэшируем (
__hash__неNone) - Хэш
intравен значению (кроме-1, который отображается в-2) - Хэш
str,bytes,tupleзависит от содержимого - Хэш
None,True,False— фиксированные
help([object])
Запускает интерактивную справку.
help(str)→ документация поstr- Вызывает
pydoc.help()
hex(x)
Возвращает шестнадцатеричную строку '0x...' для целого x.
id(object)
Возвращает уникальный идентификатор объекта (адрес в памяти в CPython).
input([prompt])
Читает строку из sys.stdin.
- Выводит
prompt, если задан - Возвращает
str
int(x=0, base=10)
Преобразует x в целое.
x:int,float,str,bytes,Fraction,Decimalbase: 0 (авто) или 2–36int('10', 2) == 2
isinstance(object, classinfo)
Проверяет, является ли object экземпляром classinfo.
classinfo: класс, кортеж классов,GenericAlias(например,list[int])- Учитывает наследование и
__instancecheck__
issubclass(class, classinfo)
Проверяет, является ли class подклассом classinfo.
iter(object[, sentinel])
Возвращает итератор.
objectс__iter__()→object.__iter__()objectс__getitem__()→ итератор по индексамsentinel: если задан — вызываетobject()до возвратаsentinel
len(s)
Возвращает длину: s.__len__()
list(iterable=())
Создаёт список.
locals()
Возвращает словарь локальных переменных текущего фрейма.
- Изменения в словаре могут не влиять на фрейм (зависит от реализации)
map(function, iterable, ...)
Применяет function к элементам итерируемых.
- Для нескольких итерируемых:
function(item1, item2, ...)
max(iterable, *[, key, default])
Возвращает наибольший элемент.
key: функция для извлечения ключа сравненияdefault: значение при пустом итерируемом
min(...)
Аналогично max, наименьший элемент.
next(iterator[, default])
Получает следующий элемент.
StopIteration, если итератор исчерпан иdefaultне указан
object()
Создаёт базовый объект.
- Единственный экземпляр без данных
- Все объекты наследуют от
object
oct(x)
Возвращает восьмеричную строку '0o...' для целого x.
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
Открывает файл.
mode:'r','w','a','b','t','+'buffering:-1(по умолчанию),0(нет),1(строковый),>1(размер)encoding:'utf-8','cp1251', и т.д.errors:'strict','ignore','replace','backslashreplace'newline: управляет обработкой\n,\r\n,\r- Возвращает
TextIOWrapper,BufferedWriter,FileIOв зависимости от режима
ord(c)
Возвращает код Unicode символа c (строка длины 1).
pow(base, exp[, mod])
Вычисляет base ** exp % mod, если mod задан, иначе base ** exp.
- Поддерживает отрицательные степени при
mod(только для целых,baseиmodвзаимно просты)
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
Выводит объекты.
sep— разделительend— завершающая строкаfile— объект сwrite()flush=True— сброс буфера немедленно
property(fget=None, fset=None, fdel=None, doc=None)
Создаёт дескриптор свойства.
range(stop), range(start, stop[, step])
Создаёт арифметическую прогрессию.
- Все параметры — целые
step != 0
repr(object)
Возвращает object.__repr__() — официальное строковое представление.
reversed(seq)
Возвращает итератор в обратном порядке.
seqдолжен иметь__reversed__()или поддерживать__len__и__getitem__
round(number[, ndigits])
Округляет до ndigits знаков.
- При
.5— к ближайшему чётному (round(2.5) == 2,round(3.5) == 4) ndigits=Noneили не указан — округление до целого
set(iterable=())
Создаёт множество.
setattr(object, name, value)
Устанавливает object.name = value.
slice(stop), slice(start, stop[, step])
Создаёт объект среза.
sorted(iterable, *, key=None, reverse=False)
Возвращает новый отсортированный список.
key: функция сортировкиreverse: порядок сортировки
staticmethod(func)
Преобразует функцию в статический метод.
str(object=''), str(object=b'', encoding='utf-8', errors='strict')
Создаёт строку.
- Для
bytes: декодирует черезencoding
sum(iterable, /, start=0)
Суммирует элементы.
start— начальное значение- Не поддерживает строковые
iterable(''.joinвместоsum)
super([type[, object-or-type]])
Возвращает прокси для поиска атрибутов в базовых классах.
- В методе:
super()→super(текущий_класс, self) - Поддерживает MRO
tuple(iterable=())
Создаёт кортеж.
type(object)
Возвращает класс объекта.
type(name, bases, dict, **kwargs)
Создаёт новый класс.
vars([object])
Возвращает object.__dict__; без аргумента — locals().
zip(*iterables, strict=False)
Объединяет итерируемые поэлементно.
strict=False(по умолчанию): останавливается по короткомуstrict=True:ValueError, если длины различаются
__import__(name, globals=None, locals=None, fromlist=(), level=0)
Низкоуровневый импорт модуля.
- Используется в
import ..., не рекомендуется напрямую level: 0 (абсолютный), >0 (относительный)
1.4 Встроенные исключения
Иерархия (сокращённая, ключевые узлы):
BaseException
├── BaseExceptionGroup
├── GeneratorExit
├── KeyboardInterrupt
├── SystemExit
└── Exception
├── ArithmeticError
│ ├── FloatingPointError
│ ├── OverflowError
│ └── ZeroDivisionError
├── AssertionError
├── AttributeError
├── BufferError
├── EOFError
├── ImportError
│ └── ModuleNotFoundError
├── LookupError
│ ├── IndexError
│ └── KeyError
├── MemoryError
├── NameError
│ └── UnboundLocalError
├── OSError
│ ├── BlockingIOError
│ ├── ChildProcessError
│ ├── ConnectionError
│ │ ├── ...
│ ├── FileExistsError
│ ├── FileNotFoundError
│ ├── InterruptedError
│ ├── IsADirectoryError
│ ├── NotADirectoryError
│ ├── PermissionError
│ ├── ProcessLookupError
│ └── TimeoutError
├── ReferenceError
├── RuntimeError
│ ├── NotImplementedError
│ └── RecursionError
├── StopIteration
├── StopAsyncIteration
├── SyntaxError
│ └── IndentationError
│ └── TabError
├── SystemError
├── TypeError
├── ValueError
│ └── UnicodeError
│ ├── UnicodeDecodeError
│ ├── UnicodeEncodeError
│ └── UnicodeTranslateError
└── Warning
├── ...
Каждый класс исключения имеет:
args— кортеж аргументов, переданных в конструктор__cause__— исключение, вызвавшее текущее (raise ... from ...)__context__— исключение, при обработке которого возникло текущее__traceback__— объектtracebackwith_traceback(tb)— устанавливает__traceback__, возвращает исключение
Часть 2. Стандартная библиотека Python
Версия: CPython 3.12. Покрытие — 130+ наиболее употребительных модулей.
2.1 abc — Abstract Base Classes
Предназначен для определения абстрактных базовых классов и интерфейсов.
ABC
Базовый класс для абстрактных классов. Наследуется от metaclass=ABCMeta.
ABCMeta
Метакласс, проверяющий реализацию абстрактных методов при создании подкласса.
abstractmethod(func)
Декоратор: помечает метод как обязательный к переопределению.
- Должен применяться до других декораторов (
@property,@classmethod). - Если не переопределён —
TypeErrorпри создании экземпляра.
abstractproperty, abstractclassmethod, abstractstaticmethod
Устаревшие алиасы. Рекомендуется использовать комбинацию:
@property
@abstractmethod
def x(self): ...
ABC.register(cls)
Вручную регистрирует cls как виртуальный подкласс. Не проверяет реализацию.
issubclass(cls, ABC), isinstance(obj, ABC)
Работают с виртуальными подклассами и проверяют реализацию интерфейса.
2.2 argparse — Парсинг аргументов командной строки
ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True, allow_abbrev=True, exit_on_error=True)
Основной класс.
parents— список другихArgumentParser, чьи аргументы наследуютсяformatter_class—argparse.RawDescriptionHelpFormatter,argparse.ArgumentDefaultsHelpFormatterи др.allow_abbrev— разрешить сокращённые имена (--ver→--verbose), по умолчаниюTrueexit_on_error— при ошибке вызыватьsys.exit(), иначе —ArgumentError
add_argument(name_or_flags..., action='store', nargs=None, const=None, default=None, type=None, choices=None, required=False, help=None, metavar=None, dest=None)
Добавляет параметр.
action:'store','store_const','store_true','store_false','append','append_const','count','help','version'
nargs:N,'?','*','+',argparse.REMAINDERtype:int,float,str,pathlib.Path,argparse.FileType('r'), пользовательские функцииchoices: итерируемый, проверкаin choicesdefault: значение по умолчанию (применяется, если аргумент не указан)required: только для не-флагов (например, позиционных)dest: имя атрибута вNamespacemetavar: имя в справке (--input FILE, а не--input INPUT)
parse_args(args=None, namespace=None)
Возвращает Namespace.
args=None→sys.argv[1:]namespace=MyClass()→ атрибуты присваиваются объекту
parse_known_args(args=None, namespace=None)
Возвращает (namespace, unknown_args) — для передачи неизвестных аргументов дальше.
FileType(mode='r', bufsize=-1, encoding=None, errors=None)
Тип для автоматического открытия файлов.
- Используется как
type=argparse.FileType('w') - Файлы закрываются при уничтожении
Namespace
2.3 asyncio — Асинхронное программирование
Ядро асинхронного выполнения.
run(coro, *, debug=None, loop_factory=None)
Запускает корутину и возвращает результат.
- Блокирует до завершения
- Создаёт и закрывает
EventLoopавтоматически loop_factory— вызываемый, возвращающийAbstractEventLoop
create_task(coro, *, name=None, context=None)
Создаёт Task в текущем цикле.
context—contextvars.Context, по умолчаниюcopy_context()
gather(*aws, return_exceptions=False)
Запускает awaitables параллельно.
- Возвращает список результатов в порядке аргументов
return_exceptions=True→ исключения возвращаются как значения- Отмена
gather()отменяет все задачи
wait(aws, *, timeout=None, return_when=ALL_COMPLETED)
Ждёт завершения awaitables.
- Возвращает
(done: set, pending: set) return_when:FIRST_COMPLETED,FIRST_EXCEPTION,ALL_COMPLETED
as_completed(aws, *, timeout=None)
Асинхронный итератор: итерирует по мере завершения.
EventLoop
Основной цикл событий.
run_until_complete(future)run_forever(),stop()call_soon(callback, *args, context=None)call_later(delay, callback, *args, context=None)call_at(when, callback, *args, context=None)time()— монотонное время в секундахcreate_future()create_task(coro)run_in_executor(executor, func, *args)— запускает в потоке/процессеadd_reader(fd, callback, *args)/remove_reader(fd)add_writer(fd, callback, *args)/remove_writer(fd)
Потокобезопасные методы:
call_soon_threadsafe(callback, *args, context=None)loop.call_soon_threadsafe(...)— единственный способ запланировать из другого потока
Task(coro, *, loop=None, name=None, context=None)
Обёртка над корутиной.
done(),cancelled(),result(),exception(),add_done_callback(fn),remove_done_callback(fn)cancel()— запрашивает отмену;cancellation()не гарантирует немедленное завершениеget_name(),set_name(name)
Future
Низкоуровневый примитив.
set_result(value),set_exception(exc)result(),exception()блокируют, если не готовы- Поддерживает
await
Lock, Event, Condition, Semaphore, Barrier
Асинхронные аналоги threading.
- Используют
await acquire(),release() Event.wait(),Event.set(),Event.clear()Condition.wait(),Condition.notify(),Condition.notify_all()- Все примитивы привязаны к текущему циклу
Stream
open_connection(host, port, ...)→(reader: StreamReader, writer: StreamWriter)start_server(client_connected_cb, host, port, ...)StreamReader.read(n=-1),readline(),readuntil(),readexactly()StreamWriter.write(Данные),drain(),close(),wait_closed()drain()—awaitпри буфере > 64 КБ (предотвращает OOM)
subprocess
create_subprocess_exec(*args, stdin=None, stdout=None, stderr=None, ...)- Возвращает
Processс атрибутамиstdin,stdout,stderr(StreamWriter/StreamReader) wait(),communicate(),terminate(),kill()
run_in_executor(executor, func, *args)
Запускает func(*args) в concurrent.futures.Executor.
- По умолчанию —
ThreadPoolExecutor - Для CPU-bound —
ProcessPoolExecutor
2.4 collections — Дополнительные типы данных
namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)
Фабрика классов: неизменяемый кортеж с именованными полями.
rename=True— переименовывает некорректные имена (class,1→_1)defaults— кортеж значений по умолчанию (справа)- Экземпляр имеет
__slots__ = (), меньше памяти, чемdict - Поддерживает
pickle,__eq__,__repr__,._asdict(),._replace(),._fields,._field_defaults
deque(iterable=(), maxlen=None)
Двусторонняя очередь.
append(x),appendleft(x),pop(),popleft()—O(1)extend(iterable),extendleft(iterable)rotate(n=1)— сдвиг наn(отрицательный — влево)maxlen— автоматическиpopleft()при переполненииcopy(),__copy__(),__deepcopy__()- Потокобезопасен для операций с одной стороны (но не атомарен при
maxlen)
ChainMap(*maps)
Цепочка словарей для поиска.
maps— список отображений ([first, second, ...])new_child(m=None)→ChainMap(m, *maps)parents→ChainMap(*maps[1:])- Изменения ведутся в первом словаре
Counter(iterable_or_mapping=(), **kwds)
Счётчик хэшируемых объектов.
update(iterable_or_mapping)— инкрементsubtract(iterable_or_mapping)— декрементmost_common(n=None)— сортировка по убываниюelements()— итератор, повторяющий элементы по счётчику+,-,&,|— арифметика (неотрицательные значения)
OrderedDict()
Устарел с Python 3.7 (обычный dict сохраняет порядок).
move_to_end(key, last=True)popitem(last=True)
defaultdict(default_factory=None)
Словарь с автоматической инициализацией отсутствующих ключей.
default_factory:list,set,int,lambda: 0, и т.д.__missing__(key)вызываетdefault_factory(), сохраняет и возвращает
UserDict, UserList, UserString
Обёртки для наследования с переопределением Данные.
UserDict→self.Данные: dictUserList→self.Данные: listUserString→self.Данные: str- Рекомендованы вместо прямого наследования от
dict/list/str
2.5 contextlib — Управление контекстами
contextmanager(func)
Декоратор: превращает генератор в менеджер контекста.
@contextmanager
def ctx():
setup()
try:
yield resource
finally:
cleanup()
asynccontextmanager(func)
Асинхронный аналог.
ContextDecorator
Базовый класс: позволяет использовать объект и как менеджер контекста, и как декоратор.
nullcontext(enter_result=None)
Пустой контекст: enter_result возвращается из __enter__().
ExitStack()
Динамическое управление несколькими контекстами.
enter_context(cm)push(exit)— функцияexit(exc_type, exc, tb)callback(callback, *args, **kwds)close()— вызывает всеexitв обратном порядке__enter__возвращаетself
AsyncExitStack()
Асинхронный аналог.
2.6 dataclasses — Классы данных
@dataclass(*, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False, match_args=True, kw_only=False, slots=False, weakref_slot=False)
Декоратор для автоматической генерации методов.
init: генерирует__init__(self, a, b=...)repr:__repr__()в видеClassName(a=1, b=2)eq:__eq__()по полямorder: генерирует__lt__,__le__,__gt__,__ge__frozen=True: имитирует неизменяемость (__setattr__→FrozenInstanceError)kw_only=True: все поля — ключевые (начиная с Python 3.10)slots=True: создаёт__slots__, снижает потребление памятиweakref_slot=True: добавляет__weakref__в__slots__
field(*, default=MISSING, default_factory=MISSING, init=True, repr=True, hash=None, compare=True, metadata=None, kw_only=MISSING)
Настройка отдельного поля.
default_factory=lambda: []— для мутабельных значенийhash=False— исключить из__hash__()compare=False— исключить из сравненияmetadata— произвольныйMapping(доступен черезfields(cls)[i].metadata)
asdict(obj, *, dict_factory=dict)
Рекурсивно преобразует в dict.
dataclass→dict,tuple→list,set→list- Циклические ссылки →
RecursionError
astuple(obj, *, tuple_factory=tuple)
Аналогично, в tuple.
is_dataclass(obj)
Проверяет, является ли obj классом или экземпляром dataclass.
fields(cls)
Возвращает кортеж Field объектов.
replace(obj, **changes)
Возвращает новый экземпляр с изменёнными полями (только для frozen=False или __post_init__ корректен).
2.7 datetime — Дата и время
date(year, month, day)
- Атрибуты:
year,month,day - Методы:
today(),fromtimestamp(timestamp),fromordinal(ordinal)replace(year, month, day)timetuple()→time.struct_timetoordinal()weekday()(0=понедельник),isoweekday()(1=понедельник)isocalendar()→(year, week, weekday)isoformat(),__str__()→YYYY-MM-DDctime(),strftime(format)
time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, fold=0)
fold— для разрешения неоднозначности при переходе на зимнее время (0 или 1)- Методы:
replace(),isoformat(),strftime(),utcoffset(),dst(),tzname()
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
- Наследует методы от
dateиtime now(tz=None),utcnow(),fromtimestamp(timestamp, tz=None),utcfromtimestamp(timestamp)strptime(date_string, format)combine(date, time, tzinfo=None)timestamp()— возвращает POSIX timestamp (секунды с 1970-01-01 UTC)
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
- Только
days,seconds,microsecondsхранятся; остальное конвертируется - Поддерживает
+,-,* (int/float),/,//,%,divmod total_seconds()— общее количество секунд (float)
timezone(offset, name=None)
offset:timedelta,-14:00 ≤ offset ≤ +14:00utc = timezone.utc
tzinfo
Абстрактный базовый класс.
utcoffset(dt),dst(dt),tzname(dt)fromutc(dt)— для обратного преобразования
datetime.astimezone(tz=None)
Преобразует в указанную зону.
tz=None→ локальная зона (tzlocal())- Требует, чтобы исходный
datetimeбылaware(либоtzinfo, либо вызванreplace(tzinfo=...))
2.8 functools — Функциональные примитивы
cache(user_function)
Декоратор: кэширует вызовы (LRU без ограничения размера).
- Аналог
lru_cache(maxsize=None) - Потокобезопасен, использует
dict
lru_cache(maxsize=128, typed=False)
Кэш с ограничением размера (Least Recently Used).
maxsize=None— без ограниченияtyped=True—3и3.0кэшируются отдельно- Методы экземпляра:
cache_info(),cache_clear()
partial(func, /, *args, **keywords)
Частичное применение.
partial(func, a, b=2)(c, d=3)→func(a, c, b=2, d=3)- Атрибуты:
func,args,keywords
partialmethod(func, /, *args, **keywords)
Аналог partial, но для методов (работает в классе).
singledispatch(func)
Диспетчеризация по типу первого аргумента.
@func.register(cls)— регистрирует реализацию дляcls- Поддерживает наследование
@func.registerбез аргумента — регистрация по аннотацииfunc.__annotations__['obj']
singledispatchmethod(func)
Вариант для методов.
wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
Декоратор: копирует метаданные (__name__, __doc__, __annotations__) из wrapped в обёртку.
total_ordering(cls)
Декоратор: добавляет недостающие методы сравнения, если реализованы __eq__ и один из __lt__, __le__, __gt__, __ge__.
cmp_to_key(mycmp)
Преобразует функцию сравнения mycmp(a, b) → -1/0/1 в ключ для sorted(), min(), max().
2.9 itertools — Итераторы для эффективных циклов
count(start=0, step=1)
Бесконечный счётчик. next() → start, start+step, ...
cycle(iterable)
Циклически повторяет iterable.
repeat(object, times=None)
Повторяет объект. times=None — бесконечно.
chain(*iterables)
Объединяет итерируемые в один поток.
compress(Данные, selectors)
Возвращает элементы Данные, где selectors истинны.
dropwhile(predicate, iterable)
Пропускает элементы, пока predicate истинен, затем возвращает остальное.
takewhile(predicate, iterable)
Возвращает элементы, пока predicate истинен.
filterfalse(predicate, iterable)
Обратное filter: возвращает, где predicate ложен.
groupby(iterable, key=None)
Группирует последовательные одинаковые элементы по key(item).
- Требует предварительной сортировки, если нужна полная группировка
islice(iterable, start, stop[, step])
Срез итератора без полной материализации.
starmap(function, iterable)
function(*args) для каждого args в iterable.
tee(iterable, n=2)
Возвращает n независимых итераторов из одного.
- Буферизация происходит по мере отставания итераторов
- Не рекомендуется при большом разрыве
zip_longest(*iterables, fillvalue=None)
Как zip, но до самого длинного; недостающие — fillvalue.
product(*iterables, repeat=1)
Декартово произведение.
product('AB', 'xy')→('A','x'), ('A','y'), ('B','x'), ('B','y')
permutations(iterable, r=None)
Все перестановки длины r (r=None → len(iterable)).
combinations(iterable, r)
Все сочетания без повторений.
combinations_with_replacement(iterable, r)
Сочетания с повторениями.
2.10 json — JSON-сериализация
dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
Сериализует в строку.
ensure_ascii=True— все не-ASCII экранируются (\uXXXX)indent=2или' '— красивый выводseparators=(',', ':')— по умолчанию;(',', ': ')для читаемостиdefault— функция для несериализуемых объектовsort_keys=True— для детерминированного вывода
dump(obj, fp, ...)
Записывает в файлоподобный объект fp.write().
loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
Десериализует строку.
object_hook=dict→ вызывается для каждогоdict:object_hook(d)object_pairs_hook— имеет приоритет; принимает список пар[('a',1), ...]parse_float=float,parse_int=int,parse_constantдляNaN,Infinity
load(fp, ...)
Читает из fp.read().
JSONEncoder, JSONDecoder
Базовые классы для кастомизации.
- Переопределяется
JSONEncoder.default(self, obj) JSONDecoder.object_hook,JSONDecoder.parse_float, и т.д.
2.11 logging — Журналирование
getLogger(name=None)
Возвращает или создаёт логгер с именем name.
name=Noneили''→ корневой логгер (logging.root)- Иерархия через точки:
getLogger('a.b')— дочерний дляgetLogger('a') - Наследует уровень и обработчики от родителя, если не переопределены
Logger
Основной класс.
- Уровни (числовые значения):
CRITICAL = 50ERROR = 40WARNING = 30INFO = 20DEBUG = 10NOTSET = 0
- Методы записи:
debug(msg, *args, **kwargs)info(...),warning(...),error(...),critical(...)log(level, msg, *args, **kwargs)exception(msg, *args, exc_info=True, **kwargs)— логирует текущее исключение
- Дополнительно:
setLevel(level)addHandler(hdlr),removeHandler(hdlr)isEnabledFor(level)findCaller(stack_info=False, stacklevel=1)
- Поведение по умолчанию: корневой логгер имеет
WARNINGиStreamHandler(sys.stderr)
Handler
Базовый класс обработчиков.
Подклассы:
StreamHandler(stream=None)→sys.stderrпо умолчаниюFileHandler(filename, mode='a', encoding=None, delay=False)RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False)- При
maxBytes > 0— переключает наfilename.1,filename.2, ...
- При
TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, ...)when:'S','M','H','D','W0'–'W6','midnight'
SocketHandler(host, port)HTTPHandler(host, url, method='GET')BufferingHandler(capacity)— буферизует доcapacityзаписейMemoryHandler(capacity, flushLevel=ERROR, target=None)— сбрасывает приflushLevel
Formatter(fmt=None, datefmt=None, style='%', validate=True, *, defaults=None)
Форматирует сообщения.
style='%': '%(levelname)s:%(name)s:%(message)s'style='{': '{levelname}:{name}:{message}'style='$': '$levelname:$name:$message'- Стандартные поля:
name,levelno,levelname,pathname,filename,module,lineno,funcName,created(timestamp),asctime,msecs,relativeCreated,thread,threadName,process,processName,message
datefmt— как вtime.strftime()defaults— словарь дополнительных полей по умолчанию
Filter
Фильтрует записи.
filter(record)→0(отклонить) /1(пропустить)name— допускает только логгеры, начинающиеся сname
LogRecord
Представляет одну запись.
- Поля заполняются автоматически при вызове
logger.info(...) - Доступны через
record.levelname,record.message, и т.д. getMessage()— возвращаетmsg % args
basicConfig(**kwargs)
Настройка корневого логгера один раз (игнорируется при повторном вызове, если уже настроен).
Параметры:
levelfilename,filemode='a'format,datefmt,stylehandlers— список обработчиков (если задан, игнорируетfilename,filemode,stream)force=False— перенастроить, даже если уже настроен (Python ≥ 3.8)encoding=None,errors=None
Потокобезопасность
Logger,Handler,Formatter— потокобезопасны- Используют внутренние блокировки (
threading.RLock) - Не гарантируется порядок записей при высокой нагрузке
Стандартные обработчики для продвинутого использования
QueueHandler(queue)+QueueListener(handler, ...)— асинхронная записьNullHandler()— заглушка для библиотек (не выводит, не создаёт предупреждения)
2.12 multiprocessing — Параллелизм на основе процессов
Process(target=None, args=(), kwargs={}, *, name=None, daemon=None)
Аналог threading.Thread, но запускает новый процесс.
start(),join([timeout]),is_alive(),terminate(),kill(),close()pid,exitcode,name,daemonclose()освобождает ресурсы (Python ≥ 3.7)
Queue([maxsize])
Межпроцессная очередь (на основе Pipe + фоновый поток).
put(obj[, block[, timeout]]),get([block[, timeout]])qsize(),empty(),full()— ненадёжны в многопроцессной среде- Не поддерживает
pickle-небезопасные объекты
Pipe([duplex])
Возвращает (conn1, conn2) — соединение «точка-точка».
duplex=True(по умолчанию) — двунаправленноеsend(obj),recv()poll([timeout]),close(),fileno()- Поддерживает передачу файловых дескрипторов (Unix)
Manager()
Создаёт прокси-объекты для совместного использования:
list(),dict(),Namespace(),Lock(),RLock(),Semaphore(),BoundedSemaphore(),Condition(),Event(),Barrier(),Queue(),Value(),Array()- Серверный процесс управляет состоянием
- Медленнее, чем
multiprocessing.Queue, но гибче
Value(typecode_or_type, *args, lock=True)
Разделяемая память для одного значения.
typecode_or_type:'i','d',ctypes.c_int, и т.д.lock=False— отключает синхронизацию (опасно)- Доступ через
.value
Array(typecode_or_type, size_or_initializer, *, lock=True)
Разделяемый массив.
- Доступ через
arr[i],arr[:] - Поддерживает срезы и присваивание
Pool([processes[, initializer[, initargs[, maxtasksperchild[, context]]]]])
Пул рабочих процессов.
apply(func, args=..., kwds=...)— синхронноapply_async(func, args=..., kwds=..., callback=None, error_callback=None)map(func, iterable[, chunksize]),map_async(...)starmap(func, iterable[, chunksize]),starmap_async(...)imap(func, iterable[, chunksize])→ итератор (ленивый)imap_unordered(...)close(),terminate(),join()maxtasksperchild— перезапуск процесса после N задач (предотвращает утечки)
get_context(method=None)
Возвращает контекст запуска:
'fork'(Unix, по умолчанию) — копирует процесс'spawn'(Windows, также на Unix) — запускает новый интерпретатор'forkserver'— отдельный сервер форкает процессы- Важно для совместимости с CUDA, GUI, и т.д.
current_process()
Возвращает объект текущего процесса (Process).
pid,name,authkey,exitcode,daemon
set_start_method(method, force=False)
Устанавливает метод запуска глобально. Вызывать до создания любых объектов.
2.13 os — Интерфейс к операционной системе
Пути и файлы
sep,altsep,pathsep,linesep,curdir,pardir,defpath,devnull— константыname—'posix','nt','java'path— объект с методами:exists(path),isfile(path),isdir(path),islink(path)getsize(path),getmtime(path),getatime(path),getctime(path)join(a, *p),split(path),splitext(path),dirname(path),basename(path)normpath(path),abspath(path),realpath(path),relpath(path, start=curdir)expanduser(path),expandvars(path)commonprefix(list),commonpath(paths)
Рабочая директория
getcwd(),chdir(path),mkdir(path, mode=0o777),makedirs(name, mode=0o777, exist_ok=False)rmdir(path),removedirs(name)listdir(path='.'),walk(top, topdown=True, onerror=None, followlinks=False)
Процессы и окружение
getpid(),getppid(),getuid(),getgid(),geteuid(),getegid()environ— мутабельный словарь переменных окруженияgetenv(key, default=None),putenv(key, value),unsetenv(key)Система(command),popen(cmd, mode='r', buffering=-1)— устаревшее, использоватьsubprocess
Управление файлами
open(path, flags, mode=0o777, *, dir_fd=None)— низкоуровневое (os.O_RDONLY,os.O_WRONLY | os.O_CREAT, и т.д.)close(fd),read(fd, n),write(fd, str),lseek(fd, pos, how)fstat(fd),stat(path),lstat(path)→ объектos.stat_resultchmod(path, mode),chown(path, uid, gid),utime(path, times=None, *, ns=None)link(src, dst),symlink(src, dst),readlink(path),unlink(path),rename(src, dst),replace(src, dst)
Сигналы (Unix)
kill(pid, sig),getpgid(pid),setpgid(pid, pgid)killpg(pgid, sig)
Прочее
urandom(n)— криптостойкий генератор (/dev/urandomилиCryptGenRandom)ctermid()— путь к управляющему терминалуttyname(fd)— имя терминала по дескрипторуgetloadavg()— загрузка системы (Unix)
Потокобезопасность
- Большинство вызовов — обёртки над системными вызовами, атомарны
environ— не потокобезопасен в CPython < 3.4; с 3.4+ — потокобезопасен
2.14 pathlib — Объектно-ориентированный интерфейс к путям
PurePath(*pathsegments)
Чисто вычислительный, без доступа к ФС.
PurePosixPath,PureWindowsPath— platform-specific- Операторы:
/(конкатенация),//(аналогично/),in(проверка подпути) - Свойства:
drive,root,anchor,parents,parent,name,stem,suffix,suffixes
- Методы:
as_posix(),as_uri(),is_absolute(),is_relative_to(other),joinpath(*other),match(pattern),relative_to(*other),with_name(name),with_stem(stem),with_suffix(suffix)
Path(*pathsegments)
Наследует от PurePath, добавляет ФС-операции.
cwd(),home()— классовые методы- ФС-методы:
stat(),lstat(),owner(),group()chmod(mode),lchmod(mode),utime(times=None, ns=None)exists(),is_dir(),is_file(),is_symlink(),is_block_device(),is_char_device(),is_fifo(),is_socket()resolve(strict=False),absolute()glob(pattern),rglob(pattern)open(mode='r', buffering=-1, encoding=None, errors=None, newline=None)read_text(encoding=None, errors=None),write_text(Данные, encoding=None, errors=None)read_bytes(),write_bytes(Данные)mkdir(mode=0o777, parents=False, exist_ok=False)touch(mode=0o666, exist_ok=True)rename(target),replace(target),unlink(missing_ok=False)rmdir(),iterdir(),walk(top_down=True, on_error=None, follow_symlinks=False)
Совместимость
os.PathLike— протокол:__fspath__()- Все функции
os,shutil,openпринимаютPath
2.15 re — Регулярные выражения
Общие параметры
- Все функции принимают
pattern(строка или скомпилированныйPattern) - Флаги (
flags):re.IGNORECASE(re.I)re.MULTILINE(re.M)re.DOTALL(re.S)re.UNICODE(re.U, по умолчанию в Python 3)re.ASCII(re.A) — ограничивает\w,\d,\sASCIIre.VERBOSE(re.X) — игнорирует пробелы и комментарии в шаблоне
Компиляция
compile(pattern, flags=0)→re.Pattern- Атрибуты:
pattern,flags - Методы:
match(),fullmatch(),search(),findall(),finditer(),split(),sub(),subn()
- Атрибуты:
Поиск и сопоставление
match(string, pos=0, endpos=sys.maxsize)- Сопоставляет только с начала строки
- Возвращает
MatchилиNone
fullmatch(string, pos=0, endpos=sys.maxsize)- Требует полного совпадения всей строки
search(string, pos=0, endpos=sys.maxsize)- Ищет первое совпадение в любом месте
findall(string, pos=0, endpos=sys.maxsize)- Возвращает список строк или кортежей (если групп > 1)
finditer(string, pos=0, endpos=sys.maxsize)- Возвращает итератор
Match
- Возвращает итератор
Замена и разбиение
sub(repl, string, count=0)repl: строка или вызываемый (lambda m: ...)\g<0>,\g<name>,\1,\g<1>— подстановка групп
subn(repl, string, count=0)→(new_string, n_subs)split(string, maxsplit=0)- Возвращает список фрагментов; совпадения не включаются
- Если группа в шаблоне — совпадения групп также включаются в результат
Match объект
group([group1, ...])→ строка или кортежgroups(default=None)→ кортеж всех группgroupdict(default=None)→dictименованных группstart([group]),end([group]),span([group])expand(template)— какsub(), но только для одного совпадения
Синтаксис шаблонов (кратко)
.— любой символ (кроме\n, если неre.S)^,$— начало/конец строки (re.M→ начало/конец строки в многострочном тексте)\d,\D,\s,\S,\w,\W[abc],[^abc],[a-z]*,+,?,{m,n},{m,},{,n}(...),(?P<name>...),(?:...),(?=...),(?!...),(?<=...),(?<!...)\A,\Z,\b,\B
Безопасность
- Некоторые регулярные выражения вызывают катастрофический откат (catastrophic backtracking)
- Используйте
re.search()с ограничением по длине, либо сторонние движки (regexвместоre) при необходимости
2.16 shutil — Высокоуровневые операции с файлами
Копирование
copyfile(src, dst, *, follow_symlinks=True)- Только содержимое, без метаданных
dst— путь, не дескриптор
copymode(src, dst, *, follow_symlinks=True)- Права доступа (
chmod)
- Права доступа (
copystat(src, dst, *, follow_symlinks=True)- Временные метки, права, ACL (если поддерживается)
copy(src, dst, *, follow_symlinks=True)copyfile()+copymode()
copy2(src, dst, *, follow_symlinks=True)copyfile()+copystat()— «полная» копия
copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False, dirs_exist_ok=False)- Рекурсивно копирует дерево каталогов
ignore— вызываемый:ignore(dir, names) → set(names_to_skip)dirs_exist_ok=True(Python ≥ 3.8) — разрешает существованиеdst
Перемещение и удаление
move(src, dst, copy_function=copy2)- Атомарно при
os.rename()(если на одной ФС), иначе копия + удаление
- Атомарно при
rmtree(path, ignore_errors=False, onerror=None)- Рекурсивное удаление каталога
onerror(function, path, exc_info)— для обработки ошибок
.rmtree.avoids_symlink_attacks— флаг (True на Unix сlstat)
Архивирование
make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, dry_run=0, owner=None, group=None, logger=None)format:'zip','tar','gztar','bztar','xztar'- Возвращает полный путь к архиву
get_archive_formats()→ список поддерживаемых форматовunpack_archive(filename, extract_dir=None, format=None)- Автоопределение формата, если
format=None
- Автоопределение формата, если
Прочее
which(cmd, mode=os.F_OK | os.X_OK, path=None)- Ищет исполняемый файл в
PATH, какwhichв оболочке
- Ищет исполняемый файл в
disk_usage(path)→namedtuple(total, used, free)chown(path, user=None, group=None)- Принимает имена или UID/GID
get_terminal_size(fallback=(80, 24))→(columns, lines)register_archive_format(name, function, ...)register_unpack_format(name, extensions, function, ...)
2.17 signal — Обработка сигналов (Unix)
Константы сигналов
SIGINT,SIGTERM,SIGKILL,SIGSTOP,SIGHUP,SIGUSR1,SIGUSR2,SIGALRM, и др.SIG_DFL,SIG_IGN,SIG_ERR
Управление
signal(signalnum, handler)handler: вызываемый (def handler(signum, frame): ...),SIG_DFL,SIG_IGN- Возвращается предыдущий обработчик
getsignal(signalnum)pause()— приостанавливает процесс до получения сигналаalarm(seconds)→ оставшееся время предыдущего таймераsetitimer(which, seconds, interval=0.0)— интервальные таймеры (ITIMER_REAL,ITIMER_VIRTUAL,ITIMER_PROF)getitimer(which)siginterrupt(signalnum, flag)— прерывать ли системные вызовы (EINTR)
Ограничения
- Обработчики выполняются в основном потоке
- Внутри обработчика допустимо только async-signal-safe API:
signal(),write(),kill(),_exit(),getattr()на простых объектах- Нельзя:
print(),logging,sys.stdout.write()(если буферизован),threading,gc,sys.exit()
- В Windows поддерживается только
SIGINT,SIGBREAK,SIGABRT
2.18 socket — Сетевые сокеты
Константы
AF_INET,AF_INET6,AF_UNIXSOCK_STREAM,SOCK_DGRAM,SOCK_RAWSOL_SOCKET,IPPROTO_TCP,IPPROTO_UDPSO_REUSEADDR,SO_REUSEPORT,SO_KEEPALIVE,TCP_NODELAY
Создание
socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)fromfd(fd, family, type, proto=0)socketpair(family=AF_UNIX, type=SOCK_STREAM, proto=0)
Атрибуты
family,type,proto,fileno()
Основные методы
bind(address)listen([backlog])accept()→(conn, address)connect(address)connect_ex(address)→ код ошибки (0 при успехе)send(bytes[, flags]),sendall(bytes[, flags])recv(bufsize[, flags]),recvfrom(bufsize[, flags])sendto(bytes, address[, flags])close(),detach()shutdown(how)—SHUT_RD,SHUT_WR,SHUT_RDWR
Управление
setblocking(flag)settimeout(value)—None(блокирующий),0.0(неблокирующий),>0(таймаут)gettimeout()setsockopt(level, optname, value)getsockopt(level, optname[, buflen])getpeername(),getsockname()
Вспомогательные функции
gethostname()gethostbyname(hostname)getaddrinfo(host, port, family=0, type=0, proto=0, flags=0)- Возвращает список
(family, type, proto, canonname, sockaddr)
- Возвращает список
getnameinfo(sockaddr, flags)inet_aton(ip_string),inet_ntoa(packed_ip)inet_pton(address_family, ip_string),inet_ntop(address_family, packed_ip)
Исключения
error— базовый класс (OSErrorподкласс)herror,gaierror,timeout
2.19 subprocess — Запуск дочерних процессов
run(args, *, stdin=None, input=None, stdout=None, stderr=None, capture_output=False, timeout=None, check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None, **other_popen_kwargs)
- Рекомендуемый интерфейс
- Возвращает
CompletedProcess(args, returncode, stdout, stderr) capture_output=True⇔stdout=PIPE, stderr=PIPEtext=True⇔encoding='utf-8'(илиuniversal_newlines=True)check=True→CalledProcessError, еслиreturncode != 0timeout→TimeoutExpired, если превышено
Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=None, startupinfo=None, creationflags=0, restore_signals=True, start_new_session=False, pass_fds=(), *, encoding=None, errors=None, text=None)
- Низкоуровневый интерфейс
- Методы:
poll()→returncodeилиNonewait(timeout=None)communicate(input=None, timeout=None)→(stdout, stderr)send_signal(signal),terminate(),kill()pid,returncode
shell=True— интерпретируетargsкак строку и запускает/bin/sh -cpreexec_fn— вызывается в дочернем процессе передexec(только Unix)pass_fds— передача дескрипторов (Unix)
Потокобезопасность и буферизация
stdout=PIPEне следует использовать при объёме > 64 КБ безcommunicate()- Для потоковой обработки — использовать
asyncio.create_subprocess_*илиthreading+queue.Queue
2.20 sys — Системные параметры и функции
Атрибуты
argv— аргументы командной строкиpath— пути поиска модулейmodules— кэш загруженных модулейbuiltin_module_names— кортеж встроенных модулейplatform—'linux','win32','darwin'version,version_info,hexversionimplementation—namedtuple(name, version, _multiarch)byteorder—'little','big'maxsize— максимальныйintдляPy_ssize_t(≈2**63-1)stdin,stdout,stderr— файлоподобные объекты__stdin__,__stdout__,__stderr__— оригиналы (до переназначения)ps1,ps2— приглашения интерпретатора (только в интерактивном режиме)flags—namedtupleфлагов (debug,inspect,optimize,dont_write_bytecode,no_user_site, …)float_info,int_info,hash_info,thread_info
Функции
exit([status])— вызываетSystemExitgetsizeof(object[, default])— размер в байтах (не рекурсивно)getrefcount(object)getfilesystemencoding(),getdefaultencoding()getprofile(),setprofile(function)gettrace(),settrace(function)intern(string)— интернирование строк (экономия памяти для часто используемых строк)setrecursionlimit(limit)getrecursionlimit()addaudithook(hook)— безопасный аудит событий (Python ≥ 3.8)breakpointhook()— переопределяется черезPYTHONBREAKPOINT
2.21 threading — Потоки
Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)
start(),join(timeout=None),is_alive()name,ident,daemonrun()— переопределяется в подклассах
Примитивы синхронизации
Lock:acquire(blocking=True, timeout=-1),release(),locked()RLock: рекурсивная блокировкаCondition(lock=None):acquire(),release()wait(timeout=None),wait_for(predicate, timeout=None)notify(n=1),notify_all()
Semaphore(value=1),BoundedSemaphore(value=1)Event:set(),clear(),is_set(),wait(timeout=None)Barrier(parties, action=None, timeout=None)wait(timeout=None)— блокирует доpartiesвызовов
Вспомогательные
current_thread()active_count(),enumerate()main_thread()get_ident()local()— потоколокальные данные (x = local(); x.v = 1)
Ограничения
- GIL не позволяет параллельное исполнение Python-кода в нескольких потоках
- Блокировки атомарны благодаря GIL
- Для CPU-bound задач — использовать
multiprocessing
2.22 time — Время
Функции
time()→float, секунды сepoch(1970-01-01 UTC)monotonic()→ монотонное время (нельзя использовать для дат, только для замеров)perf_counter()→ высокоточное время (лучшеmonotonic()для профилирования)process_time()→ время CPU текущего процессаsleep(secs)strftime(format[, t]),strptime(string[, format])gmtime([secs]),localtime([secs])→struct_timemktime(t)— обратноеlocaltime()clock_gettime(clk_id),clock_settime(clk_id, time)(Unix)CLOCK_REALTIME,CLOCK_MONOTONIC,CLOCK_PROCESS_CPUTIME_ID, и др.
struct_time
- Атрибуты:
tm_year,tm_mon,tm_mday,tm_hour,tm_min,tm_sec,tm_wday,tm_yday,tm_isdst - Доступ по индексу и имени
Константы
timezone— смещение локального часового пояса от UTC (секунды, запад — положительно)altzone— аналогично, для летнего времениdaylight— 1, если летнее время используетсяtzname—('CST', 'CDT')
2.23 types — Встроенные типы и утилиты
Типы
MappingProxyType(mapping)— read-onlydict-обёрткаSimpleNamespace(**kwargs)—objectс__dict__,__repr__,__eq__CellType— ячейка замыканияCodeType,FrameType,TracebackType,GeneratorType,CoroutineType,AsyncGeneratorTypeMethodType(func, obj)— привязанный методBuiltinMethodType,WrapperDescriptorType,MethodDescriptorType,GetSetDescriptorType
Интроспекция
new_class(name, bases=(), kwds=None, exec_body=None)resolve_bases(bases)— для метаклассовGenericAlias— дляlist[int],dict[str, int]UnionType— дляint | str(Python ≥ 3.10)
2.24 typing — Поддержка аннотаций типов
Базовые
Any,Never,NoReturnNone,Literal[...],LiteralStringUnion[T1, T2],Optional[T] == Union[T, None],T | U(Python ≥ 3.10)Tuple[T, ...],List[T],Dict[K, V],Set[T],FrozenSet[T](устаревшие, предпочтительноlist[T],dict[K, V])Sequence[T],Iterable[T],Iterator[T],Container[T],Callable[[T], R],Protocol,TypeVar,Generic,TypeGuard,ParamSpec,Concatenate,TypeAlias,TypedDict,Final,ClassVar,Annotated,Required,NotRequired,Unpack,Type,Self,assert_type,reveal_type,cast,overload,final,runtime_checkable,dataclass_transform
Примеры
T = TypeVar('T')P = ParamSpec('P')class C(Generic[T]): ...def f(x: int | None) -> str: ...MyDict = dict[str, list[int]]@overload def f(x: int) -> str: ...@final class A: ...
Совместимость
- Аннотации не влияют на выполнение (кроме
cast,assert_type) - Проверяются статическими анализаторами (
mypy,pyright) from __future__ import annotations— откладывает вычисление аннотаций
2.25 unittest — Фреймворк тестирования
TestCase
- Методы:
setUp(),tearDown(),setUpClass(),tearDownClass() - Утверждения:
assertEqual(a, b),assertNotEqual(a, b)assertTrue(x),assertFalse(x)assertIs(a, b),assertIsNot(a, b)assertIn(a, b),assertNotIn(a, b)assertIsInstance(a, b),assertNotIsInstance(a, b)assertRaises(exc, callable, *args, **kwds)assertWarns(warn, callable, *args, **kwds)assertLogs(logger=None, level=None)assertAlmostEqual(a, b, places=7),assertNotAlmostEqual(...)assertRegex(s, r),assertNotRegex(s, r)assertMultiLineEqual(a, b)assertCountEqual(a, b)
Тест-раннеры
TestRunner.run(test)TextTestRunner(verbosity=1, stream=sys.stderr, ...)unittest.main()— запуск из__main__
Прочее
TestSuite,TestLoader,skip,skipIf,skipUnless,expectedFailuremock.patch,mock.Mock,mock.MagicMock— встроены с Python 3.3 (unittest.mock)
2.26 warnings — Предупреждения
Функции
warn(message, category=UserWarning, stacklevel=1, source=None)warn_explicit(message, category, filename, lineno, module=None, registry=None, module_globals=None)simplefilter(action, category=Warning, lineno=0, append=False)filterwarnings(action, message='', category=Warning, module='', lineno=0, append=False)resetwarnings()
Действия
'default'— печатать первое предупреждение в модуле'error'→ исключение'ignore''always'— печатать всегда'module'— первое в модуле'once'— первое глобально
Категории
Warning,UserWarning,DeprecationWarning,PendingDeprecationWarning,SyntaxWarning,RuntimeWarning,FutureWarning,ImportWarning,UnicodeWarning,BytesWarning,ResourceWarningDeprecationWarningиPendingDeprecationWarningпо умолчанию не выводятся, если не запущен в__main__или не установлен-Wd
Часть 3. Экосистема Python
3.1 Веб-фреймворки
Django (синхронный full-stack)
- Основные компоненты:
django.core.management.execute_from_command_line()— точка входа CLIdjango.conf.settings— lazy-объект конфигурацииdjango.urls.path(route, view, kwargs=None, name=None),re_path()django.http.HttpRequest,HttpResponse,JsonResponsedjango.views.generic.View,TemplateView,ListView,DetailView,CreateView, и др.
- Модели:
models.Model: поля (CharField,IntegerField,ForeignKey,ManyToManyField,JSONField,UUIDField, и т.д.)- Мета-опции:
db_table,ordering,indexes,constraints,verbose_name,unique_together - QuerySet API:
filter(),exclude(),annotate(),aggregate(),select_related(),prefetch_related(),only(),defer(),bulk_create(),update(),delete()
- Админка:
admin.ModelAdmin:list_display,list_filter,search_fields,inlines,readonly_fields,get_queryset()
- Безопасность:
django.middleware.csrf.CsrfViewMiddlewaredjango.contrib.auth— пользователи, группы, права@login_required,@permission_required,user_passes_test()
Flask (микрофреймворк)
Flask(__name__, static_url_path, static_folder, template_folder, instance_relative_config=False)- Декораторы:
@app.route(rule, methods=['GET'], endpoint=None)@app.before_request,@app.after_request,@app.teardown_request@app.errorhandler(code_or_exception)
- Контексты:
request,session,g,current_app
- Расширения:
Flask-SQLAlchemy:db = SQLAlchemy(app)Flask-Migrate:migrate = Migrate(app, db)Flask-Login:login_user(),current_user,@login_requiredFlask-CORS:CORS(app)
- Конфигурация:
app.config.from_object(),from_pyfile(),from_envvar()
FastAPI (асинхронный, на основе Starlette и Pydantic)
FastAPI(title, description, version, openapi_url, docs_url, redoc_url, ...)- Маршрутизация:
@app.get("/items/{item_id}")- Поддержка
async def
- Валидация и документация:
- Параметры:
Path(...),Query(...),Header(...),Cookie(...),Body(...) - Ответы:
response_model,status_code,responses={404: {"model": Error}} Depends()— внедрение зависимостей:def get_db(): ...def read_items(db: Session = Depends(get_db)): ...
- Параметры:
- OpenAPI/Swagger: автоматическая генерация
/docs,/redoc,/openapi.json - Поддержка
WebSocket:@app.websocket("/ws") - Совместимость:
WSGI(uvicorn.run(app, ...)),ASGIнапрямую
Starlette (низкоуровневая основа FastAPI)
Request,Response,JSONResponse,PlainTextResponse,HTMLResponse,RedirectResponse,StreamingResponse,FileResponse- Роутинг:
Router,Mount,Host,WebSocketRoute,Route - Middleware:
Middleware,CORSMiddleware,SessionMiddleware,AuthenticationMiddleware - Тестирование:
TestClient(app)
ASGI-серверы
uvicorn.run(app, host="127.0.0.1", port=8000, reload=False, workers=1, loop="auto", http="auto", ws="auto", lifespan="auto", interface="asgi3", debug=False, ...)hypercorn.run(app, ...)— поддержка HTTP/2, graceful shutdowndaphne— дляchannels
3.2 ORM и работа с БД
SQLAlchemy (реляционные БД)
- Режимы:
- Core — SQL Expression Language
- ORM — маппинг объектов
create_engine(url, echo=False, pool_size=5, max_overflow=10, ...)Session = sessionmaker(bind=engine),session = Session()- ORM-модель:
class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String(50), nullable=False)emails = relationship("Email", back_populates="user")
- Запросы:
session.query(User).filter(User.name == '...').first()(Legacy)select(User).where(User.name == '...')(2.0-style)session.execute(stmt).scalars().all()
- Поддержка асинхронности:
create_async_engine,AsyncSession,await session.execute(...) - Миграции:
Alembic—alembic init,revision --autogenerate,upgrade head
Pydantic (валидация и сериализация)
BaseModel- Поля:
Field(default=..., alias=..., ge=0, le=100, pattern=r'^\w+$') - Валидация:
@validator('name', pre=True)@root_validatormodel_config = ConfigDict(extra='forbid', frozen=True, strict=True)
- Сериализация:
.model_dump(),.model_dump_json().model_validate(obj),.model_validate_json(json_str)
- Поддержка
Generic,Union,Literal,Annotated,Field,computed_field - Интеграция:
FastAPI,SQLModel,MongoEngine,Django Ninja
SQLModel (SQLAlchemy + Pydantic)
class Hero(SQLModel, table=True): id: int = Field(default=None, primary_key=True)- Единая модель для ORM и API
- Поддержка
select(),session.exec(select(...)) - Совместим с
FastAPI«из коробки»
MongoEngine (MongoDB, документная)
Document,EmbeddedDocument- Поля:
StringField,IntField,ListField,ReferenceField,DateTimeField,ObjectIdField - Запросы:
User.objects(name="...").first(),User.objects(age__gte=18) - Индексы:
meta = {'indexes': ['name', ('age', '-created')]} - Соединение:
connect('db', host='localhost', port=27017)
Tortoise ORM (асинхронный ORM)
- Определение:
class User(Model):id = fields.IntField(pk=True)name = fields.CharField(max_length=50)
- Инициализация:
await Tortoise.init(db_url="sqlite://db.sqlite3", modules={"models": ["__main__"]}) - Запросы:
await User.filter(name="...").first(),await User.create(...),await user.save() - Миграции:
aerich init,aerich migrate,aerich upgrade
3.3 Асинхронное программирование (помимо asyncio)
httpx (асинхронный HTTP-клиент)
AsyncClient(base_url=None, headers=None, timeout=5.0, ...)- Методы:
get(),post(),put(),delete(),stream() - Поддержка:
- HTTP/2 (с
httpx[http2]) - соединения:
client = AsyncClient(); await client.get(...); await client.aclose() - таймауты:
timeout=httpx.Timeout(5.0, connect=2.0)
- HTTP/2 (с
- Синхронный интерфейс:
httpx.Client()
aiohttp
aiohttp.ClientSession()— сессияsession.get(...),session.post(...)aiohttp.web.Application()— сервер- WebSocket:
ws = aiohttp.web.WebSocketResponse()
trio
async with trio.open_nursery() as nursery: nursery.start_soon(...)- Отмена:
with trio.move_on_after(5): ... - Каналы:
send_channel, receive_channel = trio.open_memory_channel(0) trio.run(main)— точка входа
3.4 Обработка данных
pandas
DataFrame(Данные=None, index=None, columns=None, dtype=None, copy=False)- Конструкторы:
pd.read_csv(),read_json(),read_sql(),read_excel(),read_parquet(),read_pickle()pd.DataFrame.from_dict(),.from_records()
- Индексация:
.loc[rows, cols],.iloc[pos],.at[label, col],.iat[pos, col]
- Операции:
groupby(),agg(),transform(),apply()merge(),join(),concat()pivot(),melt(),stack(),unstack()
- Пропуски:
isna(),dropna(),fillna(),interpolate() - Временные ряды:
resample(),rolling(),shift(),diff() - Производительность:
dtypes,categorical,query(),eval()
NumPy
array(object, dtype=None, copy=True, order='K', ...)- Типы:
int32,int64,float32,float64,bool_,complex128,object_ - Формы:
shape,ndim,size,T,reshape(),ravel(),flatten() - Создание:
zeros(),ones(),empty(),arange(),linspace(),logspace(),meshgrid() - Операции:
- Универсальные:
+,-,*,/,**,sin,cos,exp,log,sqrt - Свёртка:
sum(),prod(),mean(),std(),var(),min(),max(),argmin(),argmax() - По оси:
axis=0(столбцы),axis=1(строки)
- Универсальные:
- Линейная алгебра:
@,dot(),matmul(),linalg.inv(),linalg.solve(),linalg.eig()
polars (альтернатива pandas, Rust-ядро)
pl.DataFrame(Данные),pl.from_pandas(df)- Lazy API:
df.lazy().filter(...).group_by(...).agg(...).collect() - Оптимизации: pushdown predicate, column pruning
- Поддержка: Arrow, Parquet, CSV, JSON, IPC
3.5 CLI и инструменты разработки
click
@click.group(),@click.command()- Параметры:
@click.argument('name', type=str)@click.option('--count', '-c', default=1, type=int)@click.option('--verbose/--no-verbose', default=False)@click.option('--file', type=click.File('r'))
- Подкоманды:
@cli.command()def init(): ...
- Контекст:
@click.pass_context,ctx.obj
typer (на основе click, типизированный)
app = typer.Typer()@app.command()- Аннотации:
def main(name: str, count: int = 1, verbose: bool = False):
- Поддержка
Annotated,Union,Enum,Path,FileText - Автогенерация CLI из функций
rich
print()→rich.print()console = Console(),console.print(...),console.log(...),console.rule()- Таблицы:
Table(),table.add_column(),table.add_row() - Прогресс:
with Progress() as progress: task = progress.add_task("...", total=100) - Панель, дерево, markdown, traceback:
inspect(obj),Traceback(),Syntax(code, "python")
loguru
logger.add("file.log", rotation="500 MB", retention="10 days", compression="zip", level="INFO")logger.info("msg {x}", x=1)- Поддержка: цвета, traceback,
opt(exception=True),patch(lambda r: r["extra"].update(...)) - Замена
logging:logger.remove(); logger.add(sys.stderr)
3.6 Тестирование
pytest
- Фикстуры:
@pytest.fixture,autouse=True,scope="function"/"module"/"session" - Параметризация:
@pytest.mark.parametrize("a,b", [(1,2), (3,4)]) - Маркеры:
@pytest.mark.skip,@pytest.mark.xfail,@pytest.mark.slow - Плагины:
pytest-cov— покрытиеpytest-asyncio—@pytest.mark.asynciopytest-mock—mockerфикстура
- Конфигурация:
pytest.ini,pyproject.toml
hypothesis
@given(st.integers(), st.text())- Стратегии:
st.lists(),st.dictionaries(),st.builds(MyClass),st.from_type(MyClass) - Настройка:
settings(max_examples=100, deadline=1000) - Интеграция с
pytest
3.7 Кэширование
redis-py
redis.Redis(host='localhost', port=6379, db=0, password=None, ...)- Операции:
get(key),set(key, value, ex=60),mget(),mset()hgetall(key),hset(key, mapping={})lpush(),rpop(),blpop()sadd(),smembers(),zadd(),zrange()
- Пайплайны:
with r.pipeline() as pipe:pipe.set('a', 1)pipe.get('a')res = pipe.execute()
- Асинхронный:
redis.asyncio.Redis()
cachetools (in-memory)
LRUCache(maxsize, getsizeof=None)TTLCache(maxsize, ttl, timer=time.monotonic)cached(cache, key=lambda args, kwargs: hash(args))cachedmethod(cache)— для методов
3.8 Сериализация
orjson
orjson.dumps(obj, option=orjson.OPT_INDENT_2 | orjson.OPT_SORT_KEYS)- Поддержка:
datetime,uuid,dataclass,numpy,pandas(частично) - Опции:
OPT_NAIVE_UTC,OPT_UTC_Z,OPT_OMIT_MICROSECONDS loads()— быстрееjson.loads
msgpack
msgpack.packb(obj, use_bin_type=True)msgpack.unpackb(Данные, raw=False)- Бинарный, компактный, кросс-платформенный
3.9 Аутентификация и авторизация
authlib
Универсальный инструмент для OAuth, OpenID Connect, JWT, JWS, JWE.
OAuth2Client(client_id, client_secret, token_url, ...)jwt.encode(header, payload, key, algorithm='HS256')jwt.decode(token, key, algorithms=['HS256'], audience=None, issuer=None)- Поддержка
client_credentials,authorization_code,implicit,passwordгрантов - Интеграция:
Flask,Django,Starlette,FastAPIчерезauthlib.integrations
pyjwt
jwt.encode(payload, key, algorithm='HS256', headers=None)jwt.decode(token, key, algorithms=['HS256'], options={'verify_signature': True, 'verify_exp': True})- Алгоритмы:
HS256,RS256,ES256,PS256 - Поддержка
leewayдля временных допусков - Безопасность: рекомендуется явно указывать
algorithms, избегатьverify=False
django-allauth
- Поддержка: локальный логин + OAuth (Google, GitHub, Facebook, и др.)
- URL-паттерны:
path('accounts/', include('allauth.urls')) - Настройки:
ACCOUNT_EMAIL_REQUIRED = TrueACCOUNT_EMAIL_VERIFICATION = 'mandatory'SOCIALACCOUNT_PROVIDERS = { 'google': { 'SCOPE': ['profile', 'email'] } }
- Signals:
user_logged_in,user_signed_up,social_account_added
oauthlib
Низкоуровневая реализация OAuth1/OAuth2.
WebApplicationServer— дляauthorization_codeMobileApplicationServer— дляimplicitLegacyApplicationServer— дляpasswordTokenEndpoint,AuthorizationEndpoint— составные части- Не включает HTTP-транспорт — используется в связке с
requests-oauthlib,authlib,Django OAuth Toolkit
3.10 Валидация данных
pydantic (уже частично описан, дополнения)
- Модели:
class User(BaseModel):id: intname: str = Field(min_length=1, max_length=100)email: EmailStrtags: list[str] = []created_at: datetime = Field(default_factory=datetime.utcnow)
- Валидаторы:
@field_validator('email', mode='before')— предварительно@model_validator(mode='after')— после инициализации
- Конфигурация:
model_config = ConfigDict(extra='forbid',frozen=True,strict=True,populate_by_name=True,alias_generator=to_camel,json_schema_extra={'Примеры': [...]})
- Сериализация:
.model_dump(mode='json')— преобразуетdatetime,UUID,Decimalв JSON-совместимые.model_dump_json(indent=2, exclude_unset=True)
- Производительность:
pydantic-core(Rust-ядро) ускоряет валидацию в ~5–10×
cerberus
- Схема как словарь:
schema = {'name': {'type': 'string', 'required': True, 'minlength': 1},'age': {'type': 'integer', 'min': 0, 'max': 150},'tags': {'type': 'list', 'schema': {'type': 'string'}}}v = Validator(schema)v.validate({'name': 'Timur', 'age': 30}) # → Truev.errors # → {}
- Поддержка:
coerce,rename,default,allowed,regex, вложенные схемы - Не использует аннотации типов — полностью декларативен
jsonschema
- Поддержка Draft 7, 2019-09, 2020-12
- Валидация:
from jsonschema import validate, Draft202012Validatorschema = {"type": "object", "properties": {"name": {"type": "string"}}, "required": ["name"]}validate(instance={"name": "Timur"}, schema=schema)
- Кастомизация:
Draft202012Validator(schema).iter_errors(instance)— ленивая проверкаFormatChecker— дляemail,date-time,uri, и др.
- Интеграция: OpenAPI/Swagger, JSON Schema Store
3.11 Тестирование (дополнения)
pytest (расширенные фичи)
- Фикстуры:
scope='session'— одна на весь запускautouse=True— автоматически включаетсяyield— teardown:@pytest.fixturedef db():db = connect()yield dbdb.close()
- Параметризация по файлам/директориям:
@pytest.mark.parametrize("case", load_test_cases("Кейсы/*.json"))def test_api(case):...
- Кастомные маркеры:
# conftest.pydef pytest_configure(config):config.addinivalue_line("markers", "slow: marks tests as slow")
- Плагин
pytest-asyncio:@pytest.mark.asyncioloop_scope='function'(новое в 0.23+) — позволяет разделять event loop между тестами
hypothesis
- Стратегии:
st.text(),st.integers(min_value=0),st.floats(allow_nan=False)st.lists(st.text(), min_size=1, unique=True)st.builds(MyModel, name=st.text(), age=st.integers(0, 120))
- Настройка:
@given(st.text())@settings(max_examples=1000, deadline=500) # msdef test_upper_lower(text):assert text.upper().lower() == text.lower()
- Интеграция:
pytest,unittest,unittest.TestCaseчерез@givenкак декоратор метода
factory_boy
- Определение:
class UserFactory(factory.Factory):class Meta:model = Username = factory.Faker('name')email = factory.LazyAttribute(lambda o: f'{o.name.lower()}@example.com')is_active = True
- Использование:
UserFactory()→ один экземплярUserFactory.create_batch(5)UserFactory.build()— без сохранения в БД
- Поддержка: Django (
DjangoModelFactory), SQLAlchemy (SQLAlchemyModelFactory),peewee,mongoengine
3.12 Задачи и фоновая обработка
celery
- Брокеры:
Redis,RabbitMQ,Amazon SQS - Конфигурация:
app = Celery('proj', broker='redis://localhost', backend='redis://localhost')app.conf.update(task_serializer='json',accept_content=['json'],result_serializer='json',timezone='UTC',enable_utc=True,)
- Задачи:
@app.task(bind=True, max_retries=3)def send_email(self, to, subject):try:...except Exception as exc:raise self.retry(exc=exc, countdown=60 * (2 ** self.request.retries))
- Отслеживание:
task.delay(...),task.apply_async(args=..., countdown=10),task.signature(...)AsyncResult(task_id).get(timeout=10)
- Мониторинг:
flower— веб-интерфейс с графиками, статистикой, управлением
rq (Redis Queue)
- Простота:
from rq import Queuefrom redis import Redisq = Queue(connection=Redis())job = q.enqueue(send_email, 'user@example.com', 'Hello')job.result # после завершения
- Воркеры:
rq worker - Поддержка:
@job('high'),job.timeout = 60,job.retries = 3 - Плагины:
rq-scheduler— отложенные задачи,django-rq— интеграция с Django
dramatiq
- Акцент на надёжность:
- Автоматический повтор при падении процесса
- Акторы как задачи
- Брокеры:
Redis,RabbitMQ - Middleware:
AgeLimit,Callbacks,CurrentMessage,Prometheus,Retries,TimeLimit - Пример:
@dramatiq.actor(max_retries=3, time_limit=10000)def compute(Данные):return heavy_computation(Данные)compute.send(Данные)
3.13 Сериализация
marshmallow
- Схемы:
class UserSchema(Schema):name = fields.Str(required=True, validate=validate.Length(min=1))email = fields.Email()created_at = fields.DateTime(dump_only=True)@post_loaddef make_user(self, Данные, **kwargs):return User(**Данные)
- Использование:
schema.load(Данные)→ объект (илиValidationError)schema.dump(obj)→dict
- Поддержка: вложенные схемы (
Nested), списки (List(Nested(...))),pre_load,post_dump,validates_schema - Интеграция:
Flask,Django,SQLAlchemyчерезmarshmallow-sqlalchemy
orjson
- Высокая производительность:
- Сериализация в ~2–5× быстрее
ujson,json - Десериализация ~1.5–2× быстрее
- Сериализация в ~2–5× быстрее
- Поддержка:
datetime,date,time,UUID,dataclass,namedtuple,Enum,numpy(скаляры,ndarrayс.tolist())
- Опции:
orjson.dumps(obj,option=orjson.OPT_NAIVE_UTC | orjson.OPT_UTC_Z | orjson.OPT_SERIALIZE_NUMPY)
- Безопасность: не поддерживает произвольные
__dict__или__getattr__— только явные типы
msgpack
- Бинарный формат: компактнее JSON, быстрее парсится
- Установка:
pip install msgpack - Использование:
packed = msgpack.packb({'a': 1, 'b': [1, 2, 3]}, use_bin_type=True)unpacked = msgpack.unpackb(packed, raw=False)
- Поддержка:
datetimeчерезext-типы (msgpack.ExtType), кастомные типы черезdefault,ext_hook
3.14 CLI и интерактивные инструменты
rich (дополнения)
- Таблицы:
table = Table(title="Users")table.add_column("Name", style="cyan")table.add_column("Age", justify="right")table.add_row("Timur", "30")console.print(table)
- Прогресс:
with Progress() as progress:task = progress.add_task("[green]Processing...", total=100)for i in range(100):time.sleep(0.01)progress.update(task, advance=1)
- Markdown, Syntax, Traceback:
console.print(Markdown("# Hello"), Syntax("print('hi')", "python"), Traceback())
- Журналирование:
RichHandler(show_time=True, show_path=True, enable_link_path=True)
click vs typer
| Критерий | click | typer |
|---|---|---|
| Типизация | Необязательна | Обязательна (на основе аннотаций) |
| Вложенность команд | @cli.group() → @group.command() | app = typer.Typer(); sub = typer.Typer(); app.add_typer(sub) |
| Автодокументация | --help генерируется | То же + поддержка Enum, Path, FileText |
| Поддержка async | Через asyncio.run() | @app.command() + async def напрямую |
| Генерация shell-автодополнения | eval "$(_CLI_COMPLETE=zsh_source cli)" | typer --install-completion |
3.15 DevOps и инфраструктура
ansible
- Inventory:
hosts.iniилиhosts.yaml - Playbook:
- name: Deploy apphosts: webserversЗадачи:- name: Ensure directory existsfile:path: /opt/appstate: directorymode: '0755'- name: Copy filescopy:src: ./dist/dest: /opt/app/- name: Restart servicesystemd:name: app.servicestate: restarted
- Модули:
copy,template,file,package,service,uri,shell,command - Динамические inventory:
aws_ec2,azure_rm,gcp_compute
supervisor
- Конфиг
/etc/supervisor/conf.d/app.conf:[program:app]command=/venv/bin/gunicorn app:app -b 0.0.0.0:8000directory=/opt/appuser=www-Данныеautostart=trueautorestart=trueredirect_stderr=truestdout_logfile=/var/log/app.logenvironment=PATH="/venv/bin" - Управление:
supervisorctl reread,update,start app,status
psutil
- Процессы:
psutil.Process(pid).cpu_percent(interval=1),.memory_info(),.children(recursive=True)
- Система:
psutil.cpu_percent(percpu=True),.virtual_memory(),.disk_usage('/'),.net_io_counters()
- Утилиты:
psutil.sensors_temperatures(),.sensors_fans(),.sensors_battery()
- Кроссплатформенность: Windows, Linux, macOS, FreeBSD
3.16 Наука и анализ
scikit-learn
- Пайплайны:
pipe = Pipeline([('scaler', StandardScaler()),('pca', PCA(n_components=10)),('clf', LogisticRegression())])pipe.fit(X_train, y_train)
- Модели:
LinearRegression,LogisticRegression,RandomForestClassifier,SVC,KMeans,DBSCAN
- Валидация:
cross_val_score(pipe, X, y, cv=5)GridSearchCV,RandomizedSearchCV
- Метрики:
accuracy_score,precision_recall_fscore_support,roc_auc_score,mean_squared_error
PyTorch
- Тензоры:
torch.tensor([1, 2, 3]),.cuda(),.to(device),.requires_grad_(True)
- Модель:
class Net(nn.Module):def __init__(self):super().__init__()self.fc = nn.Linear(10, 1)def forward(self, x):return self.fc(x)
- Обучение:
model.train()for batch in dataloader:optimizer.zero_grad()loss = criterion(model(batch.x), batch.y)loss.backward()optimizer.step()
- DataLoader:
DataLoader(dataset, batch_size=32, shuffle=True, num_workers=4, pin_memory=True)
pandas (дополнения)
- Производительность:
df.eval('a + b * c')— быстрее Python-циклаdf.query('x > 0 and y < 10')pd.read_csv(..., dtype={'col': 'category'}, low_memory=False)
- Пропуски:
df.interpolate(method='linear'),.fillna(method='ffill')pd.isna(),pd.notna()
- Группировка с кастомными функциями:
df.groupby('category').agg(mean=('value', 'mean'),std=('value', 'std'),count=('value', 'size'),custom=('value', lambda x: x.quantile(0.95)))
3.17 GUI Разработка (расширенное покрытие)
PyQt6 / PySide6
- Создание приложения:
app = QApplication(sys.argv)window = QMainWindow()window.setWindowTitle("Title")window.setGeometry(100, 100, 800, 600)
- Виджеты:
QLabel,QPushButton,QLineEdit,QTextEdit,QComboBox,QListWidget,QTableWidget,QTreeWidgetQVBoxLayout,QHBoxLayout,QGridLayout,QFormLayout— компоновка
- Сигналы и слоты:
button.clicked.connect(on_click)line_edit.textChanged.connect(on_text_change)
- Модальные окна:
QDialog,QMessageBox.information(),.question(),.warning(),.critical()
- Стилизация:
widget.setStyleSheet("color: red; font-size: 14px;")- Поддержка
QSS(Qt Style Sheets), совместимого с CSS
- Модели-представления:
QStandardItemModel,QAbstractTableModel,QAbstractListModelQTableView,QListView,QTreeView
- Асинхронность:
QTimer.singleShot(0, callback)— возврат в event loopQThread+ сигналы — без блокировки UI- Интеграция с
asyncio:qasync(сторонняя библиотека)
Flet
- Архитектура: клиент-сервер (веб, нативный, мобильный)
- Базовый шаблон:
import flet as ftdef main(page: ft.Page):page.title = "Flet app"page.add(ft.Text("Hello, world!"))ft.app(target=main) # локально# ft.app(target=main, view=ft.WEB_BROWSER) # браузер# ft.app(target=main, port=8000) # веб-сервер
- Компоненты:
Text,TextField,ElevatedButton,Column,Row,Container,Image,AppBar,Banner - Состояние: обновление через
page.update()или автоматически при измененииControl - Роутинг:
page.route = "/home"+page.on_route_change - Деплой:
flet build windows/mac/linux/web/android/ios,flet deploy
DearPyGui
- GPU-ускоренный, императивный стиль:
import dearpygui.dearpygui as dpgdpg.create_context()dpg.create_viewport(title='DearPyGui', width=600, height=400)dpg.setup_dearpygui()with dpg.window(label="Main"):dpg.add_text("Hello, world!")dpg.add_button(label="Click", callback=lambda: print("Clicked"))dpg.show_viewport()dpg.start_dearpygui()dpg.destroy_context()
- Поддержка: графики (
add_plot,add_line_series), таблицы, вкладки, drag-drop, темы - Низкоуровневый контроль:
set_value,get_value,configure_item,bind_item_handler_registry
Tkinter (встроен)
- Минимальный пример:
import tkinter as tkroot = tk.Tk()tk.Label(root, text="Hello").pack()tk.Button(root, text="Quit", command=root.quit).pack()root.mainloop()
- Геометрия:
pack(),grid(),place() - События:
widget.bind("<Button-1>", handler) - Диалоги:
tkinter.messagebox,tkinter.filedialog,tkinter.colorchooser - Преимущества: встроен, кроссплатформен, лёгкий старт
- Недостатки: устаревший внешний вид, ограниченная функциональность
3.18 Web Crawling & Content Extraction
Scrapy
- Проект:
scrapy startproject myproject - Паук:
class MySpider(scrapy.Spider):name = 'example'start_urls = ['https://example.com']def parse(self, response):for item in response.css('.item'):yield {'title': item.css('h2::text').get(),'url': item.css('a::attr(href)').get(),}next_page = response.css('a.next::attr(href)').get()if next_page:yield response.follow(next_page, self.parse)
- Пайплайны:
process_item(item, spider)— очистка, валидация, сохранение
- Настройки (
settings.py):ROBOTSTXT_OBEY = TrueCONCURRENT_REQUESTS = 16DOWNLOAD_DELAY = 1USER_AGENT = 'MyBot/1.0'FEEDS = {'items.json': {'format': 'json'}}
- Middleware:
UserAgentMiddleware,RetryMiddleware,HttpProxyMiddleware
- Расширения:
scrapy-splash— JavaScript-рендерингscrapy-redis— распределённое выполнение
Playwright
- Высокоуровневый, поддержка Chromium, Firefox, WebKit:
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch(headless=False)page = browser.new_page()page.goto("https://example.com")page.wait_for_selector("h1")print(page.title())page.screenshot(path="screenshot.png")browser.close()
- Асинхронный:
await playwright.chromium.launch() - Возможности:
- Эмуляция устройства (
page.emulate_media(media="screen")) - Перехват запросов (
page.route("**/*", handler)) - Аутентификация:
context.add_cookies([...]),page.fill("input#login", ...),page.click("button#submit") - Скачать файлы:
with page.expect_download() as download_info: ...
- Эмуляция устройства (
newspaper3k
- Извлечение статьи:
from newspaper import Articlearticle = Article('https://example.com/article')article.download()article.parse()article.nlp() # keywords, summaryprint(article.title, article.text, article.keywords, article.summary)
- Поддержка: мультиязычность, извлечение изображений, авторов, дат
- Ограничения: не для динамических сайтов (SPA)
requests-html
- Простая альтернатива:
from requests_html import HTMLSessionsession = HTMLSession()r = session.get('https://example.com')r.html.render() # запускает Chromium (требует установки)titles = r.html.find('h1', first=True).text
- XPath, CSS-селекторы, JavaScript-рендеринг через
pyppeteer
3.19 Static Site Generators
MkDocs
- Конфиг
mkdocs.yml:site_name: My Projecttheme: readthedocsnav:- Home: index.md- Guide: guide.mdplugins:- search- markdownextradata - Команды:
mkdocs build→site/mkdocs serve— локальный сервер с hot-reload
- Темы:
mkdocs-material,readthedocs,windmill - Расширения Markdown: admonitions, footnotes, tables, task lists
Pelican
- Поддержка reStructuredText и Markdown
- Генерация:
pelican content -o output -s pelicanconf.py
- Плагины:
sitemap,neighbors,assets,minify - Темы:
notmyidea,flex,alchemy
Lektor
- CMS-подобный интерфейс
- Админка:
lektor server --admin→http://localhost:5000/admin - Модели данных:
models/, шаблоны:templates/ - Публикация:
lektor deploy
3.20 Serialization (дополнения)
ultrajson
- Высокая производительность:
import ujsonujson.dumps(obj, ensure_ascii=False, escape_forward_slashes=False)ujson.loads(json_str, precise_float=False)
precise_float=False— используетfloatвместоDecimal, быстрее- Поддержка:
None,bool,int,float,str,list,dict
pysimdjson
- Обёртка над
simdjson(C++): парсинг JSON в 4–10× быстрееjson.loads - Использование:
import pysimdjsonparser = pysimdjson.Parser()obj = parser.parse(b'{"a": 1}')# илиobj = pysimdjson.loads('{"a": 1}')
- Безопасность: не поддерживает
object_hook,parse_float, только строгий JSON
3.21 Hardware & Low-Level
scapy
- Отправка пакетов:
from scapy.all import *pkt = IP(dst="192.168.1.1")/ICMP()reply = sr1(pkt, timeout=2)if reply:reply.show()
- Анализ:
sniff(filter="tcp port 80", prn=lambda x: x.summary())wrpcap("capture.pcap", packets)
- Поддержка: Ethernet, IP, TCP, UDP, ICMP, ARP, DNS, HTTP, TLS (частично)
- Требует привилегий (
sudo)
pynput
- Клавиатура:
from pynput import keyboarddef on_press(key):print(f'{key} pressed')listener = keyboard.Listener(on_press=on_press)listener.start()
- Мыши:
from pynput.mouse import Controllermouse = Controller()mouse.position = (100, 200)mouse.click(Button.left, 1)
- Кроссплатформенность: Windows, macOS, Linux (X11)
3.22 Shell & CLI Enhancements
xonsh
- Python + Bash:
#!/usr/bin/env xonshfor file in $(ls *.py):echo @(file.upper())
- Переменные:
$PATH,$HOME,$PWD— как в Python (os.environ) - Алиасы:
aliases['ll'] = ['ls', '-lh']aliases['gitlog'] = lambda args: ![git --no-pager log @args]
- Плагины:
xontrib load prompt_ret_code autoxsh
thefuck
- Использование: после ошибки — ввести
fuck(или настроитьESC-ESC) - Пример:
$ git brnchgit: 'brnch' is not a git command...$ fuck # → git branch
- Правила: ~200 встроенных (
cd_parent,git_add,man_no_space,yarn_alias)
3.23 Code Analysis & Refactoring
ruff
- Замена
flake8+isort+pydocstyle+ частьpylint - Конфиг
.ruff.toml:select = ["E", "F", "I", "N", "UP"]ignore = ["E501"]line-length = 88isort.required-imports = ["from __future__ import annotations"] - Команды:
ruff check .ruff format .— форматирование (альтернативаblack)ruff check --fix .— автоматическое исправление
- Производительность: ~10–100× быстрее
flake8
Bowler
- Безопасный рефакторинг на основе
LibCST:from bowler import QueryQuery("src/").select_function("old_name").rename("new_name").execute() - Паттерны:
select_method,select_class,filter,modify,insert_after - Поддержка: dry-run, интерактивный режим
3.24 RESTful API Frameworks (дополнения)
FastAPI (расширенные возможности)
- Зависимости уровня приложения:
def get_db():db = SessionLocal()try:yield dbfinally:db.close()app = FastAPI(dependencies=[Depends(get_db)])
- Совместимость с OpenAPI:
openapi_url="/openapi.json"docs_url="/docs"(Swagger UI),redoc_url="/redoc"openapi_tags=[{"name": "users", "description": "User management"}]
- Метаданные моделей:
class User(BaseModel):name: str = Field(..., min_length=1, max_length=50, json_schema_extra={"example": "Timur"})
- Обработка ошибок:
@app.exception_handler(ValidationError)async def validation_exception_handler(request, exc):return JSONResponse(status_code=422, content={"detail": exc.errors()})
- Поддержка
asyncиsync:defвызывается вThreadPoolExecutorавтоматическиasync def— напрямую в event loop
- Интеграция с
SQLModel,Pydantic,ORJSONResponse,Uvicorn
Django REST Framework (DRF)
- Сериализаторы:
class UserSerializer(serializers.ModelSerializer):class Meta:model = Userfields = ['id', 'username', 'email']def validate_email(self, value):if 'spam' in value:raise serializers.ValidationError("Spam not allowed")return value
- ViewSets:
class UserViewSet(viewsets.ModelViewSet):queryset = User.objects.all()serializer_class = UserSerializerpermission_classes = [IsAuthenticated]filter_backends = [DjangoFilterBackend, SearchFilter]filterset_fields = ['is_active']search_fields = ['username', 'email']
- Аутентификация:
TokenAuthentication,SessionAuthentication,JWTAuthentication(черезdjangorestframework-simplejwt)
- Пагинация:
PageNumberPagination,LimitOffsetPagination,CursorPagination- Настройка:
PAGE_SIZE = 20,MAX_PAGE_SIZE = 100
Flask-RESTful
- Ресурсы:
class UserResource(Resource):def get(self, user_id):return users.get(user_id), 200def post(self):args = parser.parse_args()user_id = users.create(args)return {'id': user_id}, 201api.add_resource(UserResource, '/users/<int:user_id>')
- Парсер аргументов:
parser = reqparse.RequestParser()parser.add_argument('name', type=str, required=True)parser.add_argument('age', type=int, default=18)
- Расширения:
flask-jwt-extended,flask-cors,flask-marshmallow
3.25 Серверлесс и облачные платформы
Zappa
- Конфиг
zappa_settings.json:{"production": {"app_function": "app.app","aws_region": "us-east-1","profile_name": "default","project_name": "myapp","runtime": "python3.12","s3_bucket": "zappa-xxxx"}} - Команды:
zappa deploy productionzappa update productionzappa tail production
- Поддержка:
WSGI,Django,Flask,Bottle - Лимиты: 15 минут выполнения, 250 МБ пакета (сжатый), 3 ГБ памяти
AWS Lambda + Mangum
- Совместимость с
ASGI:from mangum import Mangumfrom fastapi import FastAPIapp = FastAPI()handler = Mangum(app) - Развёртывание через
serverless,chalice,aws-cdk - Холодный старт →
Provisioned Concurrency,SnapStart
3.26 Конфигурация приложений
hydra
- Конфиг
config.yaml:db:driver: postgresqlhost: localhostport: 5432 - Декоратор:
@hydra.main(version_base=None, config_path="conf", config_name="config")def main(cfg: DictConfig) -> None:print(cfg.db.host)
- Композиция:
defaults: [db: postgresql, model: resnet] - Переопределения в CLI:
python app.py db.host=prod.example.com
python-decouple
.env:DEBUG=TrueDATABASE_URL=postgresql://user:pass@localhost/db- Использование:
from decouple import configDEBUG = config('DEBUG', default=False, cast=bool)DATABASE_URL = config('DATABASE_URL')
- Поддержка:
.env,settings.ini,os.environ, Djangosettings.py
3.27 Текстовая обработка
spacy
- Загрузка модели:
import spacynlp = spacy.load("en_core_web_sm")doc = nlp("Apple is looking at buying U.K. startup for $1 billion")
- Извлечение:
doc.ents→Apple (ORG),U.K. (GPE),$1 billion (MONEY)token.pos_,token.dep_,token.head
- Пайплайн:
nlp.pipe(texts, batch_size=1000, n_process=4) - Кастомные компоненты:
@Language.component("custom_component")def custom_component(doc):...return docnlp.add_pipe("custom_component", last=True)
nltk
- Скачивание данных:
nltk.download('punkt'),'stopwords','wordnet' - Токенизация:
word_tokenize,sent_tokenize - Частеречная разметка:
pos_tag(tokens) - Лемматизация:
WordNetLemmatizer().lemmatize('went', 'v') - Стоп-слова:
stopwords.words('english')
textdistance
- Расстояния:
import textdistancetextdistance.levenshtein('test', 'text') # 1textdistance.jaro_winkler('test', 'text') # 0.916...textdistance.cosine('test', 'text') # 0.5
- Поддержка:
hamming,damerau_levenshtein,jaccard,sorensen,overlap,sift4, и др.
3.28 Обработка видео
moviepy
- Базовое редактирование:
from moviepy.editor import *clip = VideoFileClip("input.mp4").subclip(10, 20)txt_clip = TextClip("Hello", fontsize=70, color='white').set_position('center').set_duration(10)final = CompositeVideoClip([clip, txt_clip])final.write_videofile("output.mp4", fps=24)
- Аудио:
clip.audio.write_audiofile("audio.wav") - Экспорт GIF:
clip.write_gif("anim.gif", fps=5) - Поддержка: маски, переходы, эффекты (
fx), наложение
vidgear
- Высокопроизводительное захватывание:
from vidgear.gears import CamGearstream = CamGear(source=0).start()while True:frame = stream.read()if frame is None:breakcv2.imshow("Frame", frame)stream.stop()
- Потоковая передача:
WebGear,NetGear(ZeroMQ) - Экспорт:
WriteGear→ MP4, MKV, HLS, DASH
3.29 Тестирование (дополнения)
pytest + Schemathesis
- Автоматическое тестирование OpenAPI:
import schemathesisschema = schemathesis.from_uri("http://localhost/openapi.json")@schema.parametrize()def test_api(case):response = case.call()case.validate_response(response)
- Параметры:
endpoint="/users",method="POST",tags=["users"] - Фаззинг:
hypothesis.settings(max_examples=100)
locust
- Тест пользовательской нагрузки:
from locust import HttpUser, taskclass WebsiteUser(HttpUser):@taskdef index(self):self.client.get("/")@task(3)def profile(self):self.client.get("/profile")
- Запуск:
locust -f load_test.py --host=http://localhost:8000 - Веб-интерфейс:
http://localhost:8089
3.30 Управление пакетами
uv (Rust-ускоритель)
- Команды:
uv venv— создаёт виртуальное окружениеuv pip install requests— устанавливает быстрееpipuv pip compile requirements.in -o requirements.txt— генерация фиксированных зависимостейuv pip sync requirements.txt— синхронизация окружения
- Производительность:
- Установка
torchв ~2–5× быстрееpip - Решение зависимостей в ~10–50× быстрее
pip-tools
- Установка
poetry
- Управление проектом:
poetry init→pyproject.tomlpoetry add requestspoetry install --no-devpoetry build→dist/project-0.1.0-py3-none-any.whl
- Виртуальные окружения: изолированные, управляемые автоматически
- Поддержка:
group.dev.dependencies,scripts,plugins
3.31 Генерация фейковых данных
faker
- Базовое использование:
from faker import Fakerfake = Faker('ru_RU')fake.name() # 'Иванов Иван Иванович'fake.email() # 'ivanov@example.com'fake.phone_number() # '+7 (912) 345-67-89'fake.date_of_birth(minimum_age=18, maximum_age=90)
- Провайдеры:
address,job,credit_card,company,ssn,isbn - Локализация: 70+ локалей (
en_US,de_DE,ja_JP,zh_CN,ru_RU)
mimesis
- Аналог
faker, но:- Чистый Python, без зависимостей
- Поддержка
Schema:from mimesis.schema import Schemafrom mimesis.locales import Localeschema = Schema(schema=lambda: {'id': uuid(),'name': full_name(),'email': email(),'age': age(),}, iterations=10)schema.create() - Специализированные данные:
Наука,Cryptographic,Разработка,Datetime
3.32 Профилирование и мониторинг
py-spy
- Непрерывное профилирование:
py-spy record -o profile.svg --pid 12345py-spy top --pid 12345
- Поддержка: native-раскадровки,
--native,--gil - Без изменения кода — attach к запущенному процессу
sentry-sdk
- Интеграция:
import sentry_sdksentry_sdk.init(dsn="https://...@sentry.io/12345",traces_sample_rate=1.0,profiles_sample_rate=1.0,)
- Автоматический захват: исключений, логов (
logging),celery,django,fastapi,sqlalchemy
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Python — это высокоуровневый, интерпретируемый, динамически типизированный язык программирования общего назначения. С момента своего появления он стал одним из наиболее влиятельных языков в… Фундамент для начинающего программиста - что повторить, как работать, чего ожидать. Принципы, которые делают код понятным, поддерживаемым и расширяемым. Примеры реализации типовых приложений. Каждый пример сопровождается разбором ключевых концепций языка. Наверняка каждый новичок, решивший перейти в что-то стандартное в Python, открывает себе этот файл. Как устроен Python, что входит в комплект и какие есть реализации. Структурные каркасы для построения приложений, как они устроены. Фреймворки, библиотеки, инструменты сборки, среды выполнения, системы тестирования и специализированные платформы, объединённые общей философией ясности, простоты и гибкости. Что такое модули, как устроены механизмы импорта и загрузки. Управление изолированной средой и зависимостями проекта. Этот логотип просуществовал до 2006 года. К тому времени пользователи массово ассоциировали язык со змеями — символом, который использовался на обложках книг, в статьях и презентациях. Чтобы… Философия Python не зафиксирована в официальных стандартах, но она глубоко интегрирована в язык, его стандартную библиотеку, документацию и культуру разработчиков.Python - язык общего назначения
Что требуется знать перед началом изучения языка программирования Python
Рекомендации по разработке на Python
Простые приложения на Python
Встроенный модуль builtins и типизация в Python
Архитектура интерпретатора Python
Фреймворки и библиотеки Python
Экосистема Python-приложений
Модули в Python
Виртуальные окружения и управление зависимостями
История языка Python
Философия Python - Zen of Python